Как исправить знаки вопросов вместо русских букв
Знаки вопроса вместо русских букв, кракозябры или неверная кодировка
Как это не странно, но во времена UNICODE все еще встречается проблема знаками вопроса или кракозябрами вместо кириллицы (русских букв).
Проблема наблюдается в программах с русскоязычным интерфейсом, которые написаны на Delphi 7, вместо русских букв показывают знаки вопроса. Перевод проекта под UNICODE-версию Дельфи (2010 или 2009) практически не возможен, так как в нем используются компоненты, которые не имеют новых UNICODE-совместимые версии (авторы больше не поддерживают компоненты).
Удивляет не то, что GUI программ не показывает русские буквы, а то, что вместо кракозябр показываются знаки вопроса. Кракозябры — это символы текущей кодировки, с теми же кодами, что у нужных нам русских букв. Знаки вопроса обычно появляются когда у системы не получается сопоставить используемый символ UNICODE (к примеру, русская буква из UNICODE) с символом теперешней кодировки.
ОС Windows 7, Windows Vista и Windows XP имеют настройку локалей. Она находиться по адресу: Панель Управления->Язык и национальные стандарты-> последняя вкладка «Дополнительно». Там можно указывать язык для программ, которые не поддерживают Юникод. По логике, после выбора, в этой вкладке, русского языка, программа должна правильно показывать русские буквы. Но на деле русские буквы отображаются только в компонентах ColorBox и в шапке программы. Во всех других компонентах интерфейса отображаются все те же знаки вопроса.
Странно, но проблему решит другая настройка: Панель Управления->Язык и национальные стандарты->Региональные параметры». Эта вкладка отвечает за формат денежных единиц, чисел, дат и времени. И вроде бы не имеет отношения к кодировкам. Но все-таки, если установить значение «Русский, Россия», то знаки вопроса исчезнут и интерфейс программы начнет показывать либо русские буквы, либо кракозябры, в зависимости от того, какая локаль указана на вкладке «Дополнительно».
Ниже приводятся результаты разных комбинаций этих двух настроек в ОС Windows, начиная с XP:
Формат: США
Локаль: США
Итог: Всюду знаки вопроса
Формат: США
Локаль: Россия
Итог: В шапке и колорбоксах русские символы, во всем другом знаки вопроса
Формат: Россия
Локаль: США
Итог: Везде «крякозябры»
Формат: Россия
Локаль: Россия
Результат: Все хорошо!
Также, если не помогает, можно советует делать следующее: сбросить поле Format в English (United Sates) и вернуть обратно в Russian (Russia), или еще цитата: «Мне помогла смена формата сначала на английский, потом выход из системы, вход в систему и установка формата в русский»
Ну и способ с редактированием реестра (именно он в последнее время чаще всего выручает):
Запускайте REGEDIT и редактируйте на:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
“1250″=”c_1251.nls”
“1252″=”c_1251.nls”
Обсуждение записи “Знаки вопроса вместо русских букв, кракозябры или неверная кодировка”
Огромное спасибо! Выручили)))
Отлично! Нужно было переделать другу какой-то проэкт в Delphi 7 —
Формат: Россия
Локаль: Россия
Результат: Все хорошо!
Большое спасибо! в настройках везде стояло Русский, но шрифты в программе были в вопросиках. В региональных настройках выставил Татарский(русский)И шрифты появились. Вернул на обычный русский и все ровно все ок!
на сайте по всюду знаки вопроса, как в исходном коде декодировать на кириллицу? manuals4you.narod.ru/
Евгений, судя по тому, что код символов у этих знаков вопросов одинаков — уже никак. Если вдруг найдете методы, то поделитесь, пожалуйста =)
Все получилось. Но, буквально через 5 минут опять вопросы. Что это может быть? А получилось после того как поменяла на английский и обратно. Через реестр вообще ничего не произошло. Это происходит на одном сайте. Подскажите, что можно еще сделать.
1)работаю delphi 7. Dbexpress (sqlconnect и sqlquery). установил sqlite драйвер для работы с базой данных.
2)при обращении в БД запросом, вместо русского текста возвращает знаки вопроса. При записи в БД через delphi русского текста, он сохраняется кракозябрами в бд, но считывается нормально обратно.
3) ни один из способов не помог.
помогло преобразование типов в самом запросе! cast (name as blob) name (был text, стал blob). Удобно, но пока есть проблемы со случаями наличия в русском тесте чисел (русские буквы пропадают).
реальное огромное спасибо за помощь. сам врядли мы дошел до этого.
Только «странным» методом и удалось заставить показывать текст программу с сайта gosuslugi.ru, программисты с которого в 2016 году почему-то выкладывают для общего обязательного пользования программы, написанные на кривом Дельфи.
проблема известная, сам я её решал таким образом:
внутри System::initialization(void) есть вызов GetThreadLocale
перед этим проверяют версию системы (полученную от GetVersion)
и там ставят кодовую страницу 3, которую надо заменить на 0
(предполагаю что это CP_THREAD_ACP которое заменяется на CP_ACP)
в результате программа начинает работать правильно выводя все строки
ещё иногда приходится заменять в ресурсах DEFAULT_CHARSET на RUSSIAN_CHARSET
обратите внимание на «CODE:0040653C», вот это оно и есть.
CODE:004064A0 ; _DWORD __cdecl System::initialization()
CODE:004064A0 __fastcall System::initialization(void) proc near
CODE:004064A0 sub ds:dword_4945B8, 1
CODE:004064A7 jnb locret_406572
CODE:004064AD mov ds:byte_492008, 2
CODE:004064B4 mov ds:dword_494014, offset loc_40122C
CODE:004064BE mov ds:dword_494018, offset loc_40123C
CODE:004064C8 mov ds:byte_49404A, 2
CODE:004064CF mov ds:dword_494000, offset loc_4053EC
CODE:004064D9 call unknown_libname_51 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:004064DE test al, al
CODE:004064E0 jz short loc_4064E7
CODE:004064E2 call unknown_libname_52 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:004064E7
CODE:004064E7 loc_4064E7: ; CODE XREF: System::initialization(void)+40j
CODE:004064E7 call unknown_libname_53 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:004064EC mov ds:word_494050, 0D7B0h
CODE:004064F5 mov ds:word_49421C, 0D7B0h
CODE:004064FE mov ds:word_4943E8, 0D7B0h
CODE:00406507 call GetCommandLineA
CODE:0040650C mov ds:dword_49403C, eax
CODE:00406511 call unknown_libname_12 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:00406516 mov ds:dword_494038, eax
CODE:0040651B call GetVersion
CODE:00406520 and eax, 80000000h
CODE:00406525 cmp eax, 80000000h
CODE:0040652A jz short loc_406559
CODE:0040652C call GetVersion
CODE:00406531 and eax, 0FFh
CODE:00406536 cmp ax, 4
CODE:0040653A jbe short loc_406548
CODE:0040653C mov ds:CodePage, 3 ; 0
CODE:00406546 jmp short loc_406568
CODE:00406548 ; —————————————————————————
CODE:00406548
CODE:00406548 loc_406548: ; CODE XREF: System::initialization(void)+9Aj
CODE:00406548 call GetThreadLocale
CODE:0040654D call unknown_libname_100 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:00406552 mov ds:CodePage, eax
CODE:00406557 jmp short loc_406568
CODE:00406559 ; —————————————————————————
CODE:00406559
CODE:00406559 loc_406559: ; CODE XREF: System::initialization(void)+8Aj
CODE:00406559 call GetThreadLocale
CODE:0040655E call unknown_libname_100 ; BDS 2005-2007 and Delphi6-7 Visual Component Library
CODE:00406563 mov ds:CodePage, eax
CODE:00406568
CODE:00406568 loc_406568: ; CODE XREF: System::initialization(void)+A6j
CODE:00406568 ; System::initialization(void)+B7j
CODE:00406568 call GetCurrentThreadId
CODE:0040656D mov ds:dword_494030, eax
CODE:00406572
CODE:00406572 locret_406572: ; CODE XREF: System::initialization(void)+7j
CODE:00406572 retn
CODE:00406572 __fastcall System::initialization(void) endp
CODE:00406572
CODE:00406572 ; —————————————————————————
CODE:00406573 align 4
CODE:00406574 ; [00000006 BYTES: COLLAPSED FUNCTION GetModuleHandleA_0]
CODE:0040657A align 4
CODE:0040657C ; [00000006 BYTES: COLLAPSED FUNCTION LocalAlloc_0]
CODE:00406582 align 4
CODE:00406584 ; [00000006 BYTES: COLLAPSED FUNCTION TlsGetValue]
CODE:0040658A align 4
CODE:0040658C ; [00000006 BYTES: COLLAPSED FUNCTION TlsSetValue]
CODE:00406592 align 4
Невероятнейшее преогромнейшее благодарю автору!
А проблема эта, просто невероятнейший дебилизм, не знаю чей…
Windows 7: Вместо букв знаки вопроса
Давайте по очереди рассмотрим оба способа.
Открываем меню Пуск – Панель управления
Открываем Часы, язык и регион
Открываем Язык и региональныее стандарты
В открывшемся окне выбираем закладку Дополнительно, нажимаем Изменить язык системы
В выпадающем списке Текущий язык системы находим Русский язык, нажимаем Ок.
Соглашаемся на предложение системы перезагрузить компьютер, нажимаем кнопку Перезагрузить сейчас.
После перезагрузки вместо знаков вопроса должны отображаться нормальные надписи, написанные на русском языке:
Способ 2. Правка реестра Windows:
Запускаем редактор реестра Windows Regedit:
Нажимаем меню Пуск, в строке поиска пишем regedit,
в найденых программах должен появиться regedit.exe.
Открываем путь в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
Меняем элементы 1252 и 1250:
Все. После перезагрузки компьютера знаки вопроса исчезнут.
Последний способ лечит проблемы не только со знаками вопроса в окнах программы, а также во многих других случаях, вплоть до того, что при копировании из Майкрософт Эксель в другие программы, вставленный текст может оказаться с кракозябрами. Поэтому этот способ возьмите себе на вооружение.
Знаки вопроса вместо русских букв, решение проблемы с кодировкой Windows
Заметил на одном компьютере что вместо русских букв в командной строке да и в некоторых программах отображаются знаки вопроса.
В первую очередь необходимо убедиться, что языком системы выбран русский язык, для этого в «Пуск» — «Панель управления» — «Часы, язык и регион» — «Язык и региональные стандарты«, вкладка «Дополнительно«, раздел «Язык программ, не поддерживающих Юникод» необходимо нажать «Изменить язык системы» и выбрать «Русский (Россия)» и нажать «ОК» во всех окнах.
Также для решения проблемы откроем редактор реестра набрав в командной строке «regedit.exe«.
Командную строку можно открыть нажав по ярлыку в меню «Пуск» — «Все программы» — «Страндартные» — «Коммандная строка» или набрав «cmd» в поисковой строке меню «Пуск«.
В редакторе реестра необходимо открыть ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage
и изменить значения параметров 1250 (с c_1250.nls на c_1251.nls), 1251 (убедится что c_1251.nls), 1252 (с c_1252.nls на c_1251.nls).
Все, после перезагрузки компьютера русские буквы будут отображаться корректно.
Знаки вопроса и иероглифы вместо русских символов в некоторых программах.
Знаю, что таких тем тут десятки, но изучение десяти из них решить проблему не помогло.
При попытке на официально-приобретённые в Steam и Gog игры установить русификаторы от официальных разработчиков (1С и GameVoice) в программах установщиках вместо символов русского языка отображаются в основном знаки вопросов в чёрных ромбиках. Местами другие иероглифы.
В целом по системе пока больше нигде проблема замечена не была. Но и ничего другого через такие стандартные программы установщики пока больше на русском и не устанавливалось.
Заранее буду очень признателен за любую возможную помощь!
Сообщение о нарушении
Ответы (11)
* Попробуйте выбрать меньший номер страницы.
* Введите только числа.
* Попробуйте выбрать меньший номер страницы.
* Введите только числа.
Советую вам обновить образ Windows без ущерба для личных файлов.
Восстановить целостность поврежденных системных файлов Windows 10 можно путем обновления системы посредством утилиты Media Creation Tool. Ее можно скачать на официальном сайте Microsoft по ссылке:
https://go.microsoft.com/fwlink/?LinkId=691209
Далее запускаете Media Creation Tool. Принимаете лицензионные условия.
Выбираете Обновить этот компьютер сейчас.
Далее последует загрузка файлов для обновления, будут проведены подготовительные действия. После чего нажмите кнопку Установить. И ждите завершения процесса обновления.
Надеюсь это решит вашу проблему!
__
Если мой ответ вам помог, пожалуйста, отметьте его как ответ.
Disclaimer: В ответе могут быть ссылки на сайты не на сайты Microsoft, Все советы с таких сайтов Вы выполняете на свой страх и риск.
Вопросы вместо русских букв
4 ответа 4
1) для Apache в .htaccess:
2) для nginx в конфиге:
3) в html-документе:
4) необходимо все сущности (таблицы) установить в кодировку utf8_general_ci
5) если используете PDO:
6) если всё ещё пользуетесь процедурным доступом к БД, то:
7) в Вашем редакторе/IDE сохраняйте файл в кодировке utf8
Если не разберетесь с кодировкой из базы, то можете на невысоконагруженном проекте, например, конвертировать iconv налету все переменные.
Обновление
У меня скрипты и html странички к ним крутились на виндовс серваке, а потом все на линукс перенесли и там вместо русского были ромбики с вопросами. Нашел сначала в нете вариант через notepad++ сам html фалик сохранять в спец кодировке. Но это не дело так с каждым делать. Решение такое, заходите в httpd.conf файл апача. (у меня по умолчанию /etc/httpd/conf/httpd.conf) И там в начале есть параметр AddDefaultCharset UTF-8 Я заменил UTF-8 на windows-1251 и далее рестартанул сервак systemctl restart httpd и русский заработал на страничках в браузере.
Проблема, скорее всего, в кодировке HTML редактора, которым вы пользуетесь. Редактор может выставлять кодировку записанного файла в соответствии с языковой версией Windows. Например, на английской версии редактор может записывать в ANSI, чего не понимается браузерами.
Решение: Кодировка HTML страницы должна совпадать с кодировкой указанной в HTML тэгом. Для универсальной UTF-8 которая сегодня используется по умолчанию в большинстве блогах и т.п. HTML страница начинается с тэгов типа
Тогда текстовый редактор должен записывывать в UTF8:
В HTML редакторе настройка может быть во время Save а может где-то в Settings а может вообще не быть.




