如何将 ANSI 转换为 UTF-8?
How to convert ANSI to UTF-8?
如何将 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?
I know that ANSI code cannot display UTF-8 code, how could I convert ANSI to UTF-8?
没有“ANSI”这样的编码。如果您指的是 ASCII(又名 ANSI_X3.4-1968),则无需执行任何操作,因为 ASCII 也是有效的 UTF-8。
如果内容已经是 UTF-8 格式(正如字符集 header 暗示的那样),那么将 转换为 UTF-8 是没有意义的。
I use Linux
如果您的意思是要将从 UTF-8 转换为 ASCII,那么我想指出的是,您的终端(模拟器)很可能已配置使用 UTF-8,在这种情况下,这种转换将是 counter-productive。另外请注意,如果内容包含目标编码中不存在的字符,则无法显示这些字符。
如果确实需要在 UTF-8 和其他一些编码之间进行转换(如果不是从 ASCII 到 UTF-8 的转换),那么您会发现 C++ 没有标准的方法来执行这样的转换。您可以阅读相应编码的规范并自己实现转换 non-trivial 并且可能不适合堆栈溢出答案,或者(几乎总是更好的选择)您可以通过以下方式节省时间使用其他人编写的实现。
你真正需要做的首先是注意这个header:
Content-Encoding: gzip
并得出结论,响应不是文本,而是压缩算法的二进制结果,您需要对其进行解压缩以使其可读。 C++ 中也没有标准的(解)压缩函数。
如何将 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?
I know that ANSI code cannot display UTF-8 code, how could I convert ANSI to UTF-8?
没有“ANSI”这样的编码。如果您指的是 ASCII(又名 ANSI_X3.4-1968),则无需执行任何操作,因为 ASCII 也是有效的 UTF-8。
如果内容已经是 UTF-8 格式(正如字符集 header 暗示的那样),那么将 转换为 UTF-8 是没有意义的。
I use Linux
如果您的意思是要将从 UTF-8 转换为 ASCII,那么我想指出的是,您的终端(模拟器)很可能已配置使用 UTF-8,在这种情况下,这种转换将是 counter-productive。另外请注意,如果内容包含目标编码中不存在的字符,则无法显示这些字符。
如果确实需要在 UTF-8 和其他一些编码之间进行转换(如果不是从 ASCII 到 UTF-8 的转换),那么您会发现 C++ 没有标准的方法来执行这样的转换。您可以阅读相应编码的规范并自己实现转换 non-trivial 并且可能不适合堆栈溢出答案,或者(几乎总是更好的选择)您可以通过以下方式节省时间使用其他人编写的实现。
你真正需要做的首先是注意这个header:
Content-Encoding: gzip
并得出结论,响应不是文本,而是压缩算法的二进制结果,您需要对其进行解压缩以使其可读。 C++ 中也没有标准的(解)压缩函数。