C ++: преобразование текста UTF-8 в UTF-8 или UTF-16 - PullRequest
0 голосов
/ 13 июня 2018

В нашем приложении мы читаем файл с китайским именем, скажем, 你好 .txt .Это имя файла передается пользовательским интерфейсом в бэкэнд-приложение C ++.

Пользовательский интерфейс передает его как ä½ å ¥ ½.txt , то есть UTF-8 TEXT , а не UTF-8.Поэтому, когда я пытаюсь прочитать один и тот же файл, он показывает «Файл не существует» в C ++.

Когда я выполняю поиск в сети, есть много методов, доступных для конвертации из и в UTF-8.Но я не смог найти подходящих методов, которые конвертируют из UTF-8 TEXT .

Может ли кто-нибудь помочь решить эту проблему?

Ответ: Использование приведенного ниже кодая перешел на китайский.И наш серверный метод может прочитать файл.

template <typename T>
void fromUTF8(const string& source, basic_string<T, char_traits<T>, allocator<T>>& result)
{
    wstring_convert<codecvt_utf8_utf16<T>, T> convertor;
    result = convertor.from_bytes(source);
}

Но, опять же, у меня есть еще одно место, где мне нужно построить JSON с китайским языком. Мы используем следующий код RapidJSON:

string jsonData = "";
StringBuffer sb;
PrettyWriter<StringBuffer> writer(sb);
writer.StartObject();
writer.Key("profileid");
witer.String(strOutProfileId.c_str());

writer.Key("profilename");
writerUTF16.String(profilename.c_str());

writer.EndObject();

jsonData = sb.GetString();

JSON: {"profileid": "DUP1", "profilename": "sample"} Если это на английском языке, это работает нормально.Я хочу построить как показано ниже:

{
    "profileid": "DUP1",
    "profilename": "不用客气"
}

имя профиля хранится в wstring.тогда как изменить писателя rapidjson для написания этого китайского.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...