2014-01-13 3 views
-1

по умолчанию, std :: string на моей машине - это GBK, а строка, которую я написал в программе, кодируется с помощью gbk, но иногда я получаю данные с сервера, а данные кодируются с помощью UTF- 8, я хочу определить, какой набор символов установлен в строке. Я видел метод кодирования utf-8 и gbk, его сложно выполнить самостоятельно.Определить набор символов строки

+4

'std :: string' кодирует агностик. Он не заботится о кодировании байтов, которые вы вложили в него. По существу, он лучше описывается как «байтовая строка», чем «текстовая строка». Поэтому не имеет смысла утверждать, что «по умолчанию« std :: string »в моей машине - GBK». Когда вы получаете строку откуда-то, это где-то также должно сказать вам, какая кодировка она использует. Вы не можете надежно угадать это только из содержимого строки. –

ответ

1

Чтобы проверить, содержит ли контент std::string содержимое UTF-8, декодируйте его как UTF-8 и проверьте, не сработает ли он.

Чтобы проверить, содержит ли std::string GBK, расшифруйте его как GBK и проверьте, не сработает ли он.

Существует множество доступных библиотек для преобразования, таких как ICONV и ICU, которые обычно устанавливаются на большинстве платформ. Или используйте специфичные для платформы API, например MultiByteToWideChar() на Windows (GBK распространяется на кодовые страницы 936 и 54936, а UTF-8 покрывается кодовой страницей 65001).

Или просто напишите свой собственный декодер (UTF-8 занимает всего несколько десятков строк кода). Вы можете найти информацию о битовых макетах UTF-8 и GBK в Википедии.

Смежные вопросы