我应该使用UTF-8通过网络发送数据吗

Should I use UTF-8 to send data over the network?

本文关键字:数据 网络 UTF-8 我应该      更新时间:2023-10-16

WinAPI使用UTF-16LE编码,所以如果我调用了一些返回字符串的WinAPI函数,它将以UTF-16LE编码的形式返回。

因此,我正在考虑在程序中使用UTF-16LE编码字符串,当需要通过网络发送数据时,我将其转换为UTF-8,另一方面,我将它转换回UTF-16LE。这样可以减少要发送的数据量。

我不应该那样做是有原因的吗?

使用UTF-8编码,您将使用:

  • ASCII字符为1字节
  • U+0000和U+07FF之间的unicode字符为2个字节
  • 必要时增加字节

因此,如果你的文本是西方语言,在大多数情况下,UTF-8编码的文本可能比UTF-16LE编码的文本更短:西方字母编码在U-0000和U-0590之间。

相反,如果你的文本是亚洲人,那么UTF8编码可能会大大夸大你的数据。亚洲字符集超过U+7FF,因此需要至少3个字节的

在UTF8无处不在的文章中,您可以找到一些关于文本编码长度的(基本)统计信息,以及支持使用UTF8的其他参数。

对于网络,我想到的一个问题是,UTF8表示在所有平台上都是相同的表示,而对于UTF16,根据操作系统和CPU架构,您有LE和BE。