Вопросики вместо русских букв windows

Знаки вопроса вместо русских букв, кракозябры или неверная кодировка

Как это не странно, но во времена 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), или еще цитата: «Мне помогла смена формата сначала на английский, потом выход из системы, вход в систему и установка формата в русский»

Читайте также:  Навител навигатор для windows ce с картами

Ну и способ с редактированием реестра (именно он в последнее время чаще всего выручает):

Запускайте 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 10 про характеристики

На всякий случай вот это же место с сигнатурами (чтобы можно было попасть поиском сразу куда надо и пропатчить, место .0040653C уже изменено с 3 на 0):
.0040651B: E834AEFFFF call GetVersion — 8
.00406520: 2500000080 and eax,080000000 ;’ ‘
.00406525: 3D00000080 cmp eax,080000000 ;’ ‘
.0040652A: 742D jz .000406559 — 9
.0040652C: E823AEFFFF call GetVersion — 8
.00406531: 25FF000000 and eax,0000000FF ;’ ‘
.00406536: 6683F804 cmp ax,4
.0040653A: 760C jbe .000406548 — A
.0040653C: C705BC45490000000000 mov d,[0004945BC],0 ; was 3
.00406546: EB20 jmps .000406568 — B
.00406548: E87FADFFFF Acall GetThreadLocale — C
.0040654D: E886FEFFFF call .0004063D8 — D
.00406552: A3BC454900 mov [0004945BC],eax
.00406557: EB0F jmps .000406568 — B
.00406559: E86EADFFFF 9call GetThreadLocale — C
.0040655E: E875FEFFFF call .0004063D8 — D
.00406563: A3BC454900 mov [0004945BC],eax
.00406568: E8DFADFFFF Bcall GetCurrentThreadId — E
.0040656D: A330404900 mov [000494030],eax
.00406572: C3 retn ; -^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-

Невероятнейшее преогромнейшее благодарю автору!
А проблема эта, просто невероятнейший дебилизм, не знаю чей…

Windows 7: Вместо букв знаки вопроса

Если вы столкнулись с ситуацией, когда в диалоговых окнах, или других текстовых областях программы, вместо букв отображаются знаки вопроса — проблема всего-лишь в том, что неправильно указан Текущий язык программ, не поддерживающих Юникод. По умолчанию там стоит Английская кодировка, в которой нет кириллических символов. Поэтому, если вы столкнулись с такой ситуацией, нужно установить Русский язык.

Также в этой статье будет рассмотрен часто применяемый способ подружить европейские программы с кириллицкй — через правку реестра.

Давайте по очереди рассмотрим оба способа.

Способ 1. Панель управления — региональные настройки:

Открываем меню Пуск — Панель управления

Открываем Часы, язык и регион

Открываем Язык и региональныее стандарты

В открывшемся окне выбираем закладку Дополнительно, нажимаем Изменить язык системы

Читайте также:  Рабочий стол windows конфигурация

В выпадающем списке Текущий язык системы находим Русский язык, нажимаем Ок.

Соглашаемся на предложение системы перезагрузить компьютер, нажимаем кнопку Перезагрузить сейчас.

После перезагрузки вместо знаков вопроса должны отображаться нормальные надписи, написанные на русском языке:

Способ 2. Правка реестра Windows:

Запускаем редактор реестра Windows Regedit:

Нажимаем меню Пуск, в строке поиска пишем regedit,

в найденых программах должен появиться regedit.exe.

Открываем путь в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

Меняем элементы 1252 и 1250:

  • 1252 меняем значение с c_1252.nls на c_1251.nls
  • 1250 меняем значение с c_1250.nls на c_1251.nls

Все. После перезагрузки компьютера знаки вопроса исчезнут.

Последний способ лечит проблемы не только со знаками вопроса в окнах программы, а также во многих других случаях, вплоть до того, что при копировании из Майкрософт Эксель в другие программы, вставленный текст может оказаться с кракозябрами. Поэтому этот способ возьмите себе на вооружение.

Windows 7: Вместо букв знаки вопроса

Если вы столкнулись с ситуацией, когда в диалоговых окнах, или других текстовых областях программы, вместо букв отображаются знаки вопроса — проблема всего-лишь в том, что неправильно указан Текущий язык программ, не поддерживающих Юникод. По умолчанию там стоит Английская кодировка, в которой нет кириллических символов. Поэтому, если вы столкнулись с такой ситуацией, нужно установить Русский язык.

Также в этой статье будет рассмотрен часто применяемый способ подружить европейские программы с кириллицкй — через правку реестра.

Давайте по очереди рассмотрим оба способа.

Способ 1. Панель управления — региональные настройки:

Открываем меню Пуск — Панель управления

Открываем Часы, язык и регион

Открываем Язык и региональныее стандарты

В открывшемся окне выбираем закладку Дополнительно, нажимаем Изменить язык системы

В выпадающем списке Текущий язык системы находим Русский язык, нажимаем Ок.

Соглашаемся на предложение системы перезагрузить компьютер, нажимаем кнопку Перезагрузить сейчас.

После перезагрузки вместо знаков вопроса должны отображаться нормальные надписи, написанные на русском языке:

Способ 2. Правка реестра Windows:

Запускаем редактор реестра Windows Regedit:

Нажимаем меню Пуск, в строке поиска пишем regedit,

в найденых программах должен появиться regedit.exe.

Открываем путь в реестре HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage

Меняем элементы 1252 и 1250:

  • 1252 меняем значение с c_1252.nls на c_1251.nls
  • 1250 меняем значение с c_1250.nls на c_1251.nls

Все. После перезагрузки компьютера знаки вопроса исчезнут.

Последний способ лечит проблемы не только со знаками вопроса в окнах программы, а также во многих других случаях, вплоть до того, что при копировании из Майкрософт Эксель в другие программы, вставленный текст может оказаться с кракозябрами. Поэтому этот способ возьмите себе на вооружение.

Оцените статью