为什么GetHostName用'?'替换某些字符?

时间:2017-06-28 09:50:53

标签: c# dns

我注意到 System.Net.Dns.GetHostName() 将取代任何例如我的电脑名称中的中文字符带'?'。这是为什么?它不会取代特殊的瑞典字符。
值得注意的是,另一方面 System.Net.Dns.GetHostEntry(“localhost”)。HostName 不会替换我的中文字符。为什么主机名不应包含此类字符? GetHostAddresses(GetHostName()) 会在我的计算机上引发未知主机异常 < em> GetHostAddresses(GetHostEntry(“localhost”)。HostName) 没有。

编辑:
为了澄清我遇到的问题,我们的客户可能会将计算机名称设置为几乎任何东西。在Win 10中重命名PC只会阻止它们使用空格和字符,如[] +? - / \等。使用http://unicode.org/reports/tr36/idn-chars.html中的字符时,它们不会抱怨(它们应该是IDN名称中的有效字符) 。如果使用超过15个字符(NETBios约束),它也不会抱怨 我知道标准DNS只支持RFC 1123,它允许“A”到“Z”,“a”到“z”,“0”到“9”,以及连字符( - )。但是一些DNS实现允许更多。例如。 Windows 2000允许任何UTF-8字符。在Windows 10中设置计算机名称将导致 GetHostName 返回该计算机名称,但有关字符类型的一些例外情况。这是我不明白的。
我将计算机名称设置为“Göransθ9876543210”(使用瑞典语ö和希腊语,并且超过15个字符),系统没有任何异议。
Environment.MachineName 按预期返回“GÖRANSθ98765432”(大写和截断)。
GetHostName() 会返回“Görans?9876543210”。为什么要更换theta?为什么不更换ö?因为我位于瑞典?但它也不能取代挪威人物 GetHostEntry(“localhost”)。HostName 返回“Göransθ9876543210”。

有趣的是, GetHostAddresses(“Göransθ9876543210”) 返回6个地址(2个Ipv4和4个Ipv6), GetHostAddresses(“GÖRANSθ98765432”) 返回1(1 Ipv4!?)地址, GetHostAddresses(“Görans?9876543210”) 会为未知主机引发异常。为什么使用截断的名称几乎可以工作,但是没有替换字符的名称?

只应使用 GetHostEntry(“localhost”)。HostName 来获取计算机名称,或者它是否有任何缺点?

也许值得一提的是,我想在例如中使用计算机名称。 bonjour然后我不喜欢它,如果一些字符被'?'取代。特别是因为bonjour不允许'?'剥掉它......

0 个答案:

没有答案