我应该使用 UTF-8 通过网络发送数据吗?
Posted
技术标签:
【中文标题】我应该使用 UTF-8 通过网络发送数据吗?【英文标题】:Should I use UTF-8 to send data over the network? 【发布时间】:2015-03-20 04:12:02 【问题描述】:WinAPI 使用 UTF-16LE 编码,所以如果我调用一些返回字符串的 WinAPI 函数,它将以 UTF-16LE 编码返回。
所以我正在考虑在我的程序中对字符串使用 UTF-16LE 编码,当需要通过网络发送数据时,我将其转换为 UTF-8,另一方面我将其转换回UTF-16LE。这样可以减少要发送的数据量。
我有理由不这样做吗?
【问题讨论】:
这是你的程序,它可以做任何你想做的事情:) 我可能会考虑 UTF-8,因为它在与 3rd 方应用程序接口方面很受欢迎,但除非您发送真正大量的文本,否则我认为它不太可能占用带宽。跨度> 您要问的是大多数现代 Internet 协议的工作原理。本机编码用于内存中的字符串,通过网络发送时转换为/从 UTF-8 转换,以减少带宽并支持跨平台兼容性。 【参考方案1】:使用UTF-8 编码,您将使用:
1 个字节用于 ASCII 字符 U+0000 和 U+07FF 之间的 unicode 字符为 2 个字节 如果需要,更多字节因此,如果您的文本是西方语言,在大多数情况下,它在 UTF-8 中可能会比在 UTF-16LE 编码中更短:西方字母是 encoded between U-0000 and U-0590。
相反,如果您的文本是亚洲文本,那么 UTF8 编码可能会显着增加您的数据。亚洲字符集超过 U+7FF,因此至少需要 3 个字节
在UTF8 everywhere article 中,您可以找到有关文本编码长度的一些(基本)统计信息,以及支持使用 UTF8 的其他参数。
我想到的网络是 UTF8 表示在所有平台上都是相同的表示,而对于 UTF16,您有 LE 和 BE,具体取决于操作系统和 CPU 架构。
【讨论】:
以上是关于我应该使用 UTF-8 通过网络发送数据吗?的主要内容,如果未能解决你的问题,请参考以下文章