为什么MSDN建议在winsock调用的ansi函数中使用unicode函数?

时间:2012-05-14 23:03:40

标签: unicode winsock ansi msdn

MSDN advises

  

getaddrinfo函数是一个函数的ANSI版本,它提供从主机名到地址的独立于协议的转换。此函数的Unicode版本是GetAddrInfoW。鼓励开发人员使用GetAddrInfoW Unicode函数而不是getaddrinfo ANSI函数。

鼓励是好的,但是有没有理由这样做?我的意思是,主机名是否可以包含非ansi字符?如果是,这是IPv6独有的功能,还是IPv4主机名也可以包含unicode字符?

2 个答案:

答案 0 :(得分:3)

微软只是试图让所有人远离Ansi,就是这样。他们建议将Unicode用于所有内容,特别是因为Windows本身是基于Unicode的(并且已经很长时间了)。但是,正如Jason所说,主机名可以通过Punycode编码包含Unicode字符,后者与现有的基于Ansi的DNS系统向后兼容。

答案 1 :(得分:2)

DNS通过名为Punycode的编码方案支持所谓的“internationalized domain names”。所以是的,主机名可以包含Unicode字符。它与IPv4或IPv6无关,因为它完全是一种不同的网络协议。