我应该使用 UTF-8 通过网络发送数据吗?
Should I use UTF-8 to send data over the network?
WinAPI 使用 UTF-16LE 编码,因此如果我调用一些 return 字符串的 WinAPI 函数,它会return 它作为 UTF-16LE 编码。
所以我考虑在我的程序中对字符串使用 UTF-16LE 编码,当需要通过网络发送数据时,我将其转换为 UTF-8,另一方面我将其转换回到 UTF-16LE。这样可以减少要发送的数据量。
我有理由不这样做吗?
使用 UTF-8 编码,您将使用:
- 1 个字节用于 ASCII 字符
- 2 个字节用于 U+0000 和 U+07FF 之间的 unicode 字符
- 如果需要更多字节
因此,如果您的文本是西方语言,在大多数情况下,UTF-8 编码可能比 UTF-16LE 编码更短:西方字母是 encoded between U-0000 and U-0590。
相反,如果您的文字是亚洲文字,那么 UTF8 编码可能会显着增加您的数据。亚洲字符集超过 U+7FF,因此至少需要 3 个字节
在 UTF8 everywhere article 中,您可以找到一些关于文本编码长度的(基本)统计信息,以及支持使用 UTF8 的其他参数。
关于网络,我想到的一个是 UTF8 表示在所有平台上都是相同的表示,而对于 UTF16,您有 LE 和 BE,具体取决于 OS 和 CPU 架构.
WinAPI 使用 UTF-16LE 编码,因此如果我调用一些 return 字符串的 WinAPI 函数,它会return 它作为 UTF-16LE 编码。
所以我考虑在我的程序中对字符串使用 UTF-16LE 编码,当需要通过网络发送数据时,我将其转换为 UTF-8,另一方面我将其转换回到 UTF-16LE。这样可以减少要发送的数据量。
我有理由不这样做吗?
使用 UTF-8 编码,您将使用:
- 1 个字节用于 ASCII 字符
- 2 个字节用于 U+0000 和 U+07FF 之间的 unicode 字符
- 如果需要更多字节
因此,如果您的文本是西方语言,在大多数情况下,UTF-8 编码可能比 UTF-16LE 编码更短:西方字母是 encoded between U-0000 and U-0590。
相反,如果您的文字是亚洲文字,那么 UTF8 编码可能会显着增加您的数据。亚洲字符集超过 U+7FF,因此至少需要 3 个字节
在 UTF8 everywhere article 中,您可以找到一些关于文本编码长度的(基本)统计信息,以及支持使用 UTF8 的其他参数。
关于网络,我想到的一个是 UTF8 表示在所有平台上都是相同的表示,而对于 UTF16,您有 LE 和 BE,具体取决于 OS 和 CPU 架构.