отправка std :: wstring из «китайской Windows», отправленной «арабской Windows» - PullRequest
1 голос
/ 10 августа 2011

У меня есть сокет, через который я отправил сериализованный std :: wstring, например, скажем, из китайской версии Windows в систему Unix, работающую с арабским интерфейсом.

Я не могу понять, как моя система Unix (или что-то еще) узнает, что эти std :: wstring китайские, я не вижу, чтобы "кодовая страница" (она же язык страны?) Сохранялась в std: : wstring, я должен связать себя кодовую страницу потенциально каждого std :: wstring?

Я что-то упускаю наверняка, так как это выглядит как основной вопрос в нашем взаимосвязанном мире ...

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

Цель wstring состоит в том, чтобы разрешить весь набор символов Unicode, который включает китайский и арабский и все другие наборы символов, известные человеку.Это почти полностью отменяет концепцию кодовой страницы - символы имеют одинаковое представление на компьютере на любом языке.

См. Абсолютный минимум Каждый разработчик программного обеспечения абсолютно, положительно должен знать о Unicode и символеУстанавливает (без оправданий!) для начинающих.

Вы можете столкнуться с некоторыми проблемами при передаче, поскольку wchar_t обычно составляет 16 бит в Windows и 32 бита в Linux.Также могут возникнуть проблемы с прямым порядком байтов и порядком байтов.Самый безопасный способ действий - это передача через UTF-8, который кодирует символы Unicode в однозначные последовательности 8-битных байтов.

1 голос
/ 10 августа 2011

Вообще говоря, wstring кодируется как кодировки Unicode, которые не зависят от языка.Независимо от того, какие языковые настройки вы используете на своем компьютере, содержимое wstring остается одинаковым (это одно из главных преимуществ Unicode!).

Однако обратите внимание, что есть и другиечем одна кодировка Unicode, и платформы Unix часто используют отличную от Windows (UCS-32 против UTF-16).Я бы порекомендовал явное преобразование в UTF-8 для передачи между машинами;в Windows используйте WideCharToMultiByteCP_UTF8), а в Unixen используйте iconv() для преобразования между локальной кодировкой wstring и UTF-8 (в Unix этозаметьте, что чаще всего просто использовать UTF-8 везде - в этом случае вы будете использовать обычный std::string с текстом UTF-8 на стороне Unix).

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