Сохранение строки с японским текстом и запись в файл - PullRequest
2 голосов
/ 03 августа 2011

Я хочу сохранить японский текст в строку и записать его в файл.Я совершенно не знаком с кодировкой, и в C ++ есть много типов данных, таких как wchar_t и wstring, которые меня смущают.Как я могу это сделать?

Я пытаюсь создать правильно сформированный файл XML с некоторым содержанием CDATA на японском языке.

Ответы [ 3 ]

5 голосов
/ 03 августа 2011

Игнорировать сложности и подводные камни широких струн в целом; и убедитесь, что данные, с которыми вы работаете, кодируются с использованием UTF-8.

В C ++ строки UTF-8 могут обрабатываться так же, как расширенные строки ASCII; если только вам не удастся манипулировать ими (рубить их, считать персонажей и тому подобное).

Если все, что вас волнует, это сбор, хранение и отображение строк, это просто смехотворно тривиально.

(Без дополнительной информации о среде, в которой вы работаете, невозможно точно сказать, как вы бы позаботились об обеспечении UTF-8; но это действительно выходит за рамки этого вопроса. )

Edit:

В ответ на комментарии относительно того, что вы планируете делать (написание файла XML):

При работе с XML в частности ; это очень, очень просто:

Никогда не используйте UTF-8! или "N'DUUH!" для краткости.

В XML ASCII-баланс на практике будет всегда таким, чтобы UTF-8 была самой компактной системой кодирования.

(То есть, если каждому японскому символу в документе можно сопоставить символ ASCII, UTF-8 точно так же эффективен, как и UTF-16, с точки зрения пространства. Имена элементов XML традиционно излишне многословны, а японские предложения общеизвестно компактны, и при добавлении отступа текст на японском языке почти всегда будет соответствовать ASCII в изобилии.)

0 голосов
/ 03 августа 2011

Я пытаюсь создать правильно сформированный XML-файл с некоторым содержанием CDATA на японском языке.

Это не обязательно хорошая идея.Атрибут xml:lang обычно определяет, на каком языке находится фрагмент текста, содержащийся в XML, и вы не можете применять атрибуты к разделам CDATA.Таким образом, они должны быть в каком-то элементе XML, который может иметь надлежащий атрибут xml:lang.

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

Если вы привыкли писать байты, я бы предложил UTF-8, поскольку вы обойдете многие проблемы с порядком байтов, которые могут возникнуть на других платформах.Каждая единица кода UTF-8 - это char, поэтому вы можете использовать std::string для их хранения (хотя вам придется обрабатывать их осторожно).

0 голосов
/ 03 августа 2011

wchar_t и std::wstring могут хранить текст в Unicode, поэтому можно безопасно управлять ими и записывать их в файл.

Имейте в виду, что sizeof (wchar_t) == 2 и sizeof (char) == 1

::WriteFile(m_hFile, strString.c_str(), strString.length()*sizeof(wchar_t), pdwWritten, NULL) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...