| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > из UNICODE в ANSI |
| Автор: nikakoi 22.5.2006, 09:30 |
| Добрый день. У меня вот какая проблема... пишу програмку для сохранения текста в файл для КПК... без использования Unicode она жутко ругается=) а с использованием полученный файл открывается вроде не в Unicode, а в ANSI(или ASCI(не уверен как правильно назвать-))) Подскажите как мне конвертануть текст, чтобы читабельно было? |
| Автор: _hunter 22.5.2006, 11:10 |
| MultiByteToWideChar? |
| Автор: Earnest 22.5.2006, 11:49 |
| Ты что-то путаешь. Открывается файл всегда одинаково. Ну разве что в текстовом или бинарном режиме, к UNICODE это отношения не имеет. Если ты пишешь в файл UNICODE-строки, то их в файле и имеешь. И выглядят они при открытии в чем-нибудь неподходящем, конечно, странновато. И читать нужно тоже UNICODE-строки, разумеется. Однако никто не мешает писать в файл "обычные" строки, даже если программа UNICODE. Так что, пожалуйста, изложи конкретнее, что имеено ты хочешь, и что у тебя не получается. |
| Автор: nikakoi 22.5.2006, 12:09 |
| Не уверен, что конкретнее получится.. Получил файл с юникодными строками(а точнее там всего одна строка.)... Открываю на КПК... после каждого символа стоит квадрат.. Открываю в винде этот же фаил - квадраты встречаются везде где было \n... а в FAR'е все вообще замечательно работает - фаил открывается нормально, никаких квадратов нет... |
| Автор: Earnest 22.5.2006, 12:54 |
| Самая главная проблема программиста (да и любого специалиста) - вовсе не отсутствие каких-то знаний, а каша в голове. Что значит "открываю на КПК"? Это девочка-секретарша так сказать имеет право. Файл открывается не на компьютере, а в какой-то программе. Причем каждая программа как-то его читает и интерпретирует. FAR умеет понять, что файл записан в UNICODE, и соответственно интерпретирует показываемые строки. Windows обычно тоже умеет, хотя это зависит от версии. Квадраты после каждого символа - так некоторые текстовые редакторы показывают то, чего не знают. В данном случае нули в начале каждого широкого символа. Так что нормальный у тебя UNICODE файл. Так что ты хочешь-то? Чтобы просмотрщик, который ты в КПК используешь, нормально UNICODE-файлы читал? Так это к Биллу Гейтсу претензии... Матом, наверное, раз постеснялся написать конкретно... |
| Автор: nikakoi 22.5.2006, 12:58 |
| ну все=) унизили и обидели нет не матом... D:\Microsoft Visual Studio 8\VC\ce\atlmfc\include\afxv_w32.h(227) : fatal error C1083: Cannot open include file: 'mbctype.h': No such file or directory вот что выдает... а по поводу секретарши да и вообще я только учусь... а CString'и они в ASCII бывают?? я все ими сделал просто |
| Автор: Earnest 22.5.2006, 13:27 |
| Не обижайся, я любя Между прочим, ты так и не сказал конкретно, в чем проблема. А правильно поставленный вопрос - это уже половина решения... CString - это макрос, который либо CStringA, либо CStringW, в зависимости от того, как скомпилирована программа - UNICODE или нет. Во-первых, можно пользоваться конкретным типом (т.е. CStringA). Во-вторых, если тебе нужен файл для KПK, то зачем тебе UNICODE? Из твоих объяснений я поняла, что не-UNICODE программу тебе сделать не удается. Так первым делом с этим надо разобраться, потому как нехорошо это. Судя по всему 8-я студия сразу по умолчанию ставит использование UNICODE. Вот тут я тебе ничего конкретно сказать не могу, т.к. у меня VS 2003, и для КПК я никогда не писала, а ты, похоже, как-то специально проект настраивал именно под програмирование КПК? (Путь в ошибке какой-то странный: ...VC\ce\atlmfc\include... - что там за "ce"?). Так вот, сначала нужно разобраться, вдруг правда нельзя не-UNICODE программы писать для КПК? (сомнительно, честно говоря). Попробовать сделать проект заново, указав опцию "использовать MultiByte". А может у тебя просто пути к инклуд-каталогам неправильно настроены? |
| Автор: CaptainFlint 23.5.2006, 17:20 |
Если не ошибаюсь, Windows Mobile - юникодная система... |
| Автор: Earnest 23.5.2006, 18:21 |
| Тогда непонятно, почему оно UNICODE-файлы не читает нормально. |
| Автор: CaptainFlint 23.5.2006, 18:29 |
| Earnest, так ведь ещё не ясно, что за программа, как написана и т.д. Может же юникодная программа быть написана так, что читает только ANSI-файлы. Например, если пишется с использованием char'ов, а не TCHAR'ов... Код нужон... PS: Эх, жаль, так до сих пор и не выбрал времени поиграться с программированием под КПК... |
| Автор: Earnest 23.5.2006, 18:40 |
| Мне казалось из контекста вопросов, что для чтения используется что-то стандартное, а не самопал: - про свою программу так обычно не говорят... Ждем аффтара... |
| Автор: nikakoi 24.5.2006, 10:29 | ||
| Аффтар тут=)) Я использую Cstring'и, как и писал в начале...
Вот в карце текст программки А открываю txt файл обычным WordMobile'ом(кажется он так называется) |
| Автор: Earnest 24.5.2006, 10:40 |
| Проверь, читает ли этот Вордомобиль какие-нибудь другие файлы UNICODE (не твои). Если читает нормально, значит, надо искать, чем твои порождения отличаются. Если не читает, значит пиши не-UNICODE. Т.е. используй CStringA. Кстати, записывать файлы в тестовом режиме не пробовал? Может ему просто \r\n не хватает для счастья? В смысле, по-моему по умолчанию там бинарный режим, а для текстового нужно указать что-то вроде modeText. |
| Автор: nikakoi 24.5.2006, 10:49 |
| В винде делал юникод файл(текстовый CStringA и modeText я не пробовал... Надеюсь вечером потестю... |
| Автор: CaptainFlint 24.5.2006, 12:53 |
| Судя по тексту программы, она собрана в режиме ANSI, поскольку строки написаны без L и без _T(). Значит, CString ранслируется в CStringA (как и все API-вызовы). Если сопоставить с этим первый пост темы, как-то странно всё это выглядит... |
| Автор: mostly 24.5.2006, 14:56 | ||
D:\Microsoft Visual Studio 8\VC\ce\atlmfc\include\afxv_w32.h ^ ^ ^ Пробелы в имени каталога. |
| Автор: CaptainFlint 24.5.2006, 19:25 | ||||||
ANSI в Unicode - не умеет.
вот результат компиляции:
Это на восьмёрке, проект - консольное Windows-приложение с поддержкой MFC (Юникод включён по умолчанию). |
| Автор: Damarus 24.5.2006, 23:54 | ||
| nikakoi, у меня два предложения: 1. Попробуй в самом начале создаваемого файла писать \uFFFE. Т.е.:
2. В винде (что мобильной, что обычной) лучше писать не "\n", а "\r\n". |