Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Использование Unicode в программе |
Автор: Pilligrim 14.3.2007, 21:16 | ||
Решил перевести свою программу с ANSI на Unicode. Все хорошо, но вот какая проблемка: пишу в файл вот так:
Все записывается без ошибок, но в файле явно символов больше, чем я записывал: во-первых, перед каждым символом есть какой-то еще один(причем один и тот же) во-вторых, русские символы она записывает неправильно Что делать? |
Автор: ama_kid 14.3.2007, 21:37 |
А юникод продефайнен? |
Автор: Pilligrim 14.3.2007, 21:40 | ||
Да:
|
Автор: dumb 15.3.2007, 04:41 |
читать, что из себя представляет UNICODE. все вопросы сразу отпадут. если кратко: записывается в файл у тебя именно "уникодная" строка - просто, судя по всему, ты не имеешь представления о том, как этот самый уникод выглядит... ![]() |
Автор: Tectoder 15.3.2007, 13:02 |
Ага, в два раза. WriteFile записывает то что ей дают. Эта функция имеет одну реализацию, нет функций WriteFileA и WriteFileW Если у тебя в программе юникод строки то они и записываются в файл. Если тебе это не нравится нужно перед записью преобразовывать строки в анси. А после чтения преобразовывать обратно. Но тогда теряютяс плюсы юникода. Как вариант - перед записью в файл перекодировать строку в кодировку UTF-8. Это "ужатый юникод", кодировка в которой число байт на символ зависит от самого символа. Если у тебя большинство символов английские это поможет сократить размер файла, но также это не лешает возможности писать в файл китайские, русские или ещекакиенибудьстранные символы. Ну и конечно же надо понимать что такое юникод, прежде чем во всем этом разбираться. В этом может помочь одна из лучших вики-статей http://ru.wikipedia.org/wiki/юникод |
Автор: Pilligrim 15.3.2007, 20:53 | ||||
Tectoder, оно конечно понятно, но все бы хорошо, если бы я, записывая строки юникод, мог бы потом и считать их. Но это не так... Например русские символы она записывает(а соответственно и считывает потом) не верно. dumb, представление я имею, и то что символов больше я понимаю почему, но вот про русские символы я не понял до сих пор... Читаю вот как:
|
Автор: Tectoder 15.3.2007, 21:24 |
Все таки лучше писать полностью тот код, который вы используете, а не отредактированный фрагмент. |
Автор: Pilligrim 16.3.2007, 21:14 | ||
Привожу код:
Код прямо из проги вырвал. Если какие-нить переменные не объявлены - спрашивайте. |
Автор: Pilligrim 18.3.2007, 19:50 |
Всем спасибо! Проблемы оказывается и не было, это все Блокнот виндовский. Он виноват!!! Он юникод каряво понимает как-то... Все ОК))) |