Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с кодировкой  (Прочитано 24503 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 10-04-2005 14:43 » 

Создаем какое-нибудь приложение, создаем диалоговое окно, на нем элемент Label в котором пишем что-нибудь типа "введите текст" пишем обязательно на русском. Во время разработки эскиз диалогового окна отображается номально, но когда уже запускаешь откомпилированное приложение, то начинаются проблемы с кодировкой, т.е. русские буквы отображаются некорректно. Вопрос заключается в том как это победить.
Записан

ещё один вопрос ...
xelos
Гость
« Ответ #1 : 10-04-2005 19:19 » 

региональные настройки и винда какая?
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 11-04-2005 01:53 » 

Винда ХП, региональные настройки - Россия, языки РУС и АНГ. Часовой пояс - по Московскому времени Улыбаюсь.
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 11-04-2005 16:39 » 

Какая дефолтная кодировка?
В XP SP2 "Regional Settings", вкладка Advanced, "Language for non-unicode progrms"
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 11-04-2005 23:37 » 

У меня SP1,
Цитата
Какая дефолтная кодировка?
по умолчанию стоит Английский. 
Цитата
В XP SP2 "Regional Settings", вкладка Advanced, "Language for non-unicode progrms"
Там русский стоит.
Вы думаете в винде дело? Это получается если я скомпилю ехе-шник и у меня при его запуске интерфейс будет отображаться голимо, то на других компьютерах он может отражаться очень даже зашебись?
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 12-04-2005 06:54 » 

nikedforest, попробуй юникодные контролы, может быть поможет.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 12-04-2005 09:35 » 

У меня такое было в Visual Studio 6 из-за редактора ресурсов.
Исправлялось явной установкой языка для ресурсов (для диалога).
Записан
Pu
Большой босс

ru
Offline Offline
78


« Ответ #7 : 12-04-2005 09:53 » 

в VS7.1 установка в ресурсах для диалогов. выбрать id диалога или меню не раскрывая сам ресурс и заглядываешь на его свойства, дык вот там надо выставить язык - русский
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 12-04-2005 14:02 » 

У меня VC++6.0, посмотрю сейчас свойства диалога по поводу установок языка, но что - то я  не очень -то помню, чтобы такие там были. Но кстати эти установки я так понял можно посмотреть, когда пишешь с помощью МФЦ или чего-то там еще если на VS,  а что делать, если пишешь на АПИ?
Записан

ещё один вопрос ...
Chaa
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 13-04-2005 03:03 » 

Неважно, на чем ты пишешь - MFC или чистый API, редактор ресурсов работает одинаково.
Выдели диалог, нажми Alt+Enter, в окошке со свойствами должен быть выбор языка. После того, как изменишь язык, заново набери все русские тексты в контролах.
Мне помогало...
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 13-04-2005 10:25 » 

Цитата
Неважно, на чем ты пишешь - MFC или чистый API,
Как неважно, если я допустим пишу CreateWindow(...), то на какой форме я буду нажимать Alt+Enter?
Записан

ещё один вопрос ...
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 18-04-2005 15:09 » 

Если окно есть в ресурсах, то катит на самом деле установка языка, но что делать когда я пишу CreateWindow, когда окна в ресурсах нет?
Записан

ещё один вопрос ...
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 19-04-2005 20:55 » 

Попробуй юникод
В первой строке файла, в котором есть вызов CreateWindow,
поставь #define UNICODE или установи UNICODE и свойствах компиляции (если шестая студия)
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 19-04-2005 21:50 » 

Про юникод товарищ тоже сегодня подсказал, но он предлагал исползовать функцию которя конвертит строку в юникод, но название ее запамятовал. Никто не помнит, что за функция?
#define UNICODE попробую.
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 20-04-2005 23:13 » 

А почему бы не засунуть эту самую строчку, которую надо отображать в ресурсы в StringTable? Ресурсы всё-равно всегда в UNICODE сохраняются. В этом случае LoadString сам выполнит необходимые преобразования.
Если хочется ручками, то ф-ции называются (примерно из головы) WidecharToMultibyte и MultibyteToWidechar.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 21-04-2005 09:42 » 

Цитата
Если хочется ручками, то ф-ции называются (примерно из головы) WidecharToMultibyte и MultibyteToWidechar.
Примерно так они и называются.
Засовывать в StringTable в данном(моем) случае не спортивно Улыбаюсь.
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 21-04-2005 11:51 » 

Улыбаюсь Улыбаюсь
Может и не спортивно - зато чисто. Во всяком случае лучше, чем статический текст по коду разбрасывать. Ага Раз уж это текстовые ресурсы, то как говорится "Кесарю - кесарево, а слесарю - слесарево".
Если не секрет, то что за случай такой спортивный?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #17 : 21-04-2005 12:23 » 

Цитата
Если не секрет, то что за случай такой спортивный?
Да ничего особенного,  просто вовремя выполнения метка на форме меняет фразы вот и все. Может ты кстати и прав, но я еще не разу текст из StringTable не вынимал, надо будет поэкспериментировать.
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 21-04-2005 13:33 » 

Ну дык, как раз самое то - поэкспериментировать. Сделай на разный языках. С динамическим переключением. Типа - объект возвращает строку с ID. Объект сам внотри смотрит текущий язык и добавляет к ID смещение. Типа - ID с 1000 по 1999  - русский 2000 по 2999 - китайский
тогда CMyString::LoadString(ID=1) = LoadString(ID+offset) для русского=1000 для китайского 2000. Проще пареной репы. И спортивно Улыбаюсь
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 21-04-2005 14:05 » 

Особенно с китайским будет прикольно Улыбаюсь. Попробую, но позже.
Записан

ещё один вопрос ...
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #20 : 10-05-2005 20:14 » 

В MSVC6++ мне всегда помогает ручная правка rc-файла и замена строк
"LANGUAGE БЛАБЛА, БЛАБЛАБЛА" на "LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT". Работает как часы. Улыбаюсь
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #21 : 10-05-2005 20:30 » 

На самом деле не всё так просто. Текстовые ресурсы записываются всегда в UNICODE. А редактор ресурсов может работать (парсить и сохранять) только в ANSI.
Поэтому блок LANGUAGE БЛАБЛА, БЛАБЛАБЛА указывает какую кодовую страничку необходимо использовать для конвертирования ANSI в UNICODE. Обычно студия сама отслеживает текущую локаль и устанавливает значение кодовой странички. Например если у меня немецкая винда, то я получаю немецкий язык вместо БЛАБЛА, БЛАБЛАБЛА. Изменяю региональные установки на русский - получаю русский язык. Проблема возникает только тогда, когда пытаешься воспользоваться языком который не поддерживается без UNICODE. Например на немецкой системе - русский язык (или немецкий на русской). Тогда выход только один - редактировать .rc файл в Блокноте и сохранять его в UNICODE.
При компиляции такого файла проблем не возникнет, но редактировать в редакторе ресурсов его нельзя.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
baldr
Команда клуба

cy
Offline Offline
Пол: Мужской
Дорогие россияне


WWW
« Ответ #22 : 10-05-2005 20:37 » 

Конечно нельзя. Приходится закрывать проект, редактировать блокнотом и открывать снова.
Вообще язык должен бы выбираться при создании проекта. У меня там Английский, французский, итальянский... Еще парочка, но русского ни разу не видел. Поэтому и приходится править вручную.
Записан

Приличный компьютер всегда будет стоить дороже 1000 долларов, потому что 500 долларов - это не вполне прилично
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 10-05-2005 21:32 » 

Цитата
В MSVC6++ мне всегда помогает ручная правка rc-файла и замена строк
"LANGUAGE БЛАБЛА, БЛАБЛАБЛА" на "LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT". Работает как часы.
Так у меня в том проекте, где кирилица отображалась аброй кадаброй стоит LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT (видать стоит по умолчанию, т.к я вроде ничего не менял)Не понял Так что видать не всегда помогает.
Записан

ещё один вопрос ...
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 10-05-2005 23:36 » 

Вообще язык должен бы выбираться при создании проекта. У меня там Английский, французский, итальянский... Еще парочка, но русского ни разу не видел. Поэтому и приходится править вручную.

Выбирается язык ресурсов - например при выборе немецкого языка в меню вместо File будет стоять Datei. А в испанской вместо привычного ОК - Aceptar.
C VS поставляются только 9 языков найти их можно
<%программная папка%>\Microsoft Visual Studio .NET 2003\Vc7\VCWizards\mfcappwiz\templates
Номера папок соответствуют кодовым страничкам - например 3082 - испанский.
В этих папках находятся заготовки используемые визардом для создания необходимых языковых ресурсов - если интересно можно посмотреть файл all.rc (он есть в каждой папке) - он очень напоминает готовый rc файл за тем лишь исключением, что вместо конкретных значений параметров стоят переменные типа:
"#include ""[!output RES_PATH]\\[!output PROJECT_NAME].rc2""

К сожалению других языков (в частности русского) в этом наборе нет.

В независимости от выбора этого языка параметр LANGUAGE определяется только региональными настройками системы:
Примеры (оба проекта создавались на немецкой версии w2k с англиским языком ресурсов)
1. "Родные" региональные настройки
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
2. Русские региональные настройки
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT

Поэтому для "нормального" функционирования русского языка необходимо установить русские региональные настройки включая поддержку русского как не юникодного языка (если конечно сама система не является русской). И следить за тем, чтобы в ресурсах была установлена правильная кодировка LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT. Таким образом можно будет пользоваться ANSIшным редактором ресурсов и получать русские версии программ на русских платформах.
Для отображения языка на любой платформе (конечно имеется ввиду язык винды) необходимо сохранять перед компиляцией rc файл в формате UNICODE например с помощью блокнота.

И ещё одно замечание - некоторые версии студии используют дефолтные шрифты диалога семейства MS
MS Sans Serif или Microsoft Sans Serif. Эти шрифты например на немецкой системе не имеют юникодной русской части, поэтому ресурсы (диалоги) с этими шрифтами не корректно отображались даже с "юникодными" ресурсами. В таких случаях лучше использовать шрифт MS Shell Dlg.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 11-05-2005 12:40 » 

Цитата
MS Sans Serif или Microsoft Sans Serif. Эти шрифты например на немецкой системе не имеют юникодной русской части, поэтому ресурсы (диалоги) с этими шрифтами не корректно отображались даже с "юникодными" ресурсами. В таких случаях лучше использовать шрифт MS Shell Dlg.
Был такой (MS Sans Serif).
Записан

ещё один вопрос ...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines