Как преобразовать ANSI в UTF-8? - PullRequest
0 голосов
/ 14 июля 2020

Как преобразовать ANSI в UTF-8?
Я использую сокет Linux для получения ответа HTTP, но в ответе есть некоторые символы UTF-8, если я их напечатаю, я найду некоторые символы ошибки, вот так:

[ghostworker@ArchForXed b-client]$ ./get-http-response
HTTP/1.1 200 OK
Date: Tue, 14 Jul 2020 03:24:11 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: Tengine
S-TIME-NS: 
S-TIME-CONN: 
S-TIME-PRE: 
S-TIME-START: 
S-TIME-TOTAL: 
ETag: "0215910f600c2a23e08f40035c3f881e"
Content-Encoding: gzip
Vary: Accept-Encoding
X-Cache-Webcdn: BYPASS from ks-sh-webcdn-25

b0
�
[ghostworker@ArchForXed b-client]$ 

Я знаю, что код ANSI не может отображать код UTF-8, как мне преобразовать ANSI в UTF-8?

1 Ответ

3 голосов
/ 14 июля 2020

Я знаю, что код ANSI не может отображать код UTF-8, как мне преобразовать ANSI в UTF-8?

Нет такой кодировки, как «ANSI». Если вы имеете в виду ASCII (он же ANSI_X3.4-1968), тогда нет необходимости что-либо делать, потому что ASCII также действителен UTF-8 как есть.

Если контент уже находится в UTF-8 (как заголовок charset подразумевает), тогда преобразование в UTF-8 из другой кодировки не имеет смысла.

Я использую Linux

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

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

Что вам действительно, вероятно, сначала нужно сделать, так это обратить внимание на этот заголовок:

Content-Encoding: gzip

И сделать вывод, что ответ не является текстовым, но вместо этого двоичный результат алгоритма сжатия, и вам нужно распаковать его, чтобы сделать его читаемым. Стандартных функций (де-) сжатия в C ++ также нет.

...