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

时间:2015-03-20 04:12:03

标签: c++ windows sockets winapi character-encoding

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

所以我想在我的程序中对字符串使用UTF-16LE编码,当它需要通过网络发送数据时,我将其转换为UTF-8,另一方面我把它转换回UTF-16LE。这样就可以发送更少的数据。

我不应该这样做吗?

1 个答案:

答案 0 :(得分:2)

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

  • ASCII字符的1个字节
  • U + 0000和U + 07FF之间的unicode字符为2个字节
  • 如果necesseray更多字节

因此,如果您的文本是西方语言,在大多数情况下,UTF-8可能比UTF-16LE编码更短:西方字母为encoded between U-0000 and U-0590

相反,如果您的文字是亚洲文,那么UTF8编码可能会显着增加您的数据。亚洲字符集超出U + 7FF,因此需要至少3个字节

UTF8 everywhere article中,您可以找到有关文本编码长度的一些(基本)统计信息,以及支持使用UTF8的其他参数。

我想到的网络就是UTF8表示在所有平台上都是相同的代表,而对于UTF16,你有LE和BE,这取决于操作系统和CPU架构。