Название: Чтение русских букв из реестра? Отправлено: kuzulis от Февраль 02, 2010, 21:43 Доброго всем времени суток.
Не получается что-то отобразить в консоли считанную строку значения из реестра. Строка в реестре написана "по русски". Читал виндовой АПИ-шной функцией RegQueryValueExA. код Код: ... где str - считанная из реестра строка приведенная к типу QString Должно получиться "Последовательный порт (COM1)", но программка выводит это: Цитировать friendlyName = "Iineaaiaaoaeuiue ii?o (COM1)" Подскажите, как "орусифицировать" ? Название: Re: Чтение русских букв из реестра? Отправлено: cya-st от Февраль 02, 2010, 23:14 Вот посмотри примерчик, думаю разберешся:
Код: QString str1, str2; Название: Re: Чтение русских букв из реестра? Отправлено: cya-st от Февраль 02, 2010, 23:16 str2 -это то что ты прочитал из реестра.
Название: Re: Чтение русских букв из реестра? Отправлено: lit-uriy от Февраль 02, 2010, 23:16 а как читаешь её из реестра?
Название: Re: Чтение русских букв из реестра? Отправлено: kuzulis от Февраль 03, 2010, 08:23 2 lit-uriy ,
Цитировать а как читаешь её из реестра? что-то вроде:Код: ... как-то так.. пишу по памяти. Если искомая строка (значение ключа) в реестре английское - то проблем нет.. но если кирилица, то не получается. 2 cya-st , Цитировать Вот посмотри примерчик, думаю разберешся: спасибо, попробую.Название: Re: Чтение русских букв из реестра? Отправлено: Tonal от Февраль 03, 2010, 08:53 Ты вызываешь RegQueryValueExA - это Ansi-шная функция. Т. е. строки она принимает/возвращает в ANSI.
Для русских это кодировке windows-1251. Т. е. при преобразовании в QString, которая в unicode тебе нужно строку конвертнуть как показал cya-st Код А вот на консоль по умолчанию работает в кодировке OEM - cp866. Т. е. перед выводом строки её нужно конвертнуть в OEM: Код
Название: Re: Чтение русских букв из реестра? Отправлено: kuzulis от Февраль 03, 2010, 09:06 2 Tonal,
спасибо :) Но если я хочу сделать "универсальный" вывод строки, т.е. чтобы правильно отображалось название в любом Windows!!! т.е. взял к примеру грек или араб или китаец запустил программку в своей локализованной винде и у него строка отобразилась бы без крякозябл ! т.е codecForName("Windows-1251") в этом случае не проходит по идее.. не буду же я писать для каждой страны определение типа кодировки и вписывать "Windows-125ххххх" ? Как в этом случае быть? Название: Re: Чтение русских букв из реестра? Отправлено: BRE от Февраль 03, 2010, 09:10 т.е codecForName("Windows-1251") в этом случае не проходит по идее.. не буду же я писать для каждой страны определение типа кодировки и вписывать "Windows-125ххххх" ? QTextCodec * QTextCodec::codecForLocale () [static]Название: Re: Чтение русских букв из реестра? Отправлено: kuzulis от Февраль 03, 2010, 09:18 спс
Название: Re: Чтение русских букв из реестра? Отправлено: Akaiten от Февраль 03, 2010, 10:13 а почему бы не использовать RegQueryValueExW и получать значение в юникоде?
Название: Re: Чтение русских букв из реестра? Отправлено: kuzulis от Февраль 03, 2010, 10:23 А там ошибки лезут :)
Название: Re: Чтение русских букв из реестра? Отправлено: SASA от Февраль 03, 2010, 11:17 Как в этом случае быть? На форуме обсуждался вопрос вывода в консоль. И было сказано, что узнать кодировку консоли средствами Qt нельзя. Т.е. из реестра вы считаете, а на консоль вывести может не получится. Название: Re: Чтение русских букв из реестра? Отправлено: Tonal от Февраль 04, 2010, 11:29 Узнать кодировку консоли вполне можно: GetConsoleCP (http://msdn.microsoft.com/en-us/library/ms683162%28VS.85%29.aspx).
А вот вывести в неё любую unicode строку может и не получится. :) Ну и к тому же это всё жёстко к виндам привязано. :) |