作者 主題: [問題] NetworkInterface.getDisplayName()亂碼  (閱讀 6869 次)

0 會員 與 1 訪客 正在閱讀本文。

millhost

  • 懷疑的國中生
  • **
  • 文章數: 74
    • 檢視個人資料
各位大大,小弟初學 JAVA 遇到亂碼問題有請各位賜教
小弟用 NetworkInterface.getDisplayName()讀取電腦所有網絡卡的MAC address 發現當有中文出現就會亂碼 (例如藍芽網絡設備)
程式碼如下

代碼: [選擇]
Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
while(interfaces.hasMoreElements())
{
    NetworkInterface device = (NetworkInterface) interfaces.nextElement();
    if (device.getHardwareAddress() != null && !( device.isPointToPoint() || device.isLoopback() ) )
    {
        byte[] mac = device.getHardwareAddress();
        macaddress = new String();
        for (int i = 0; i < mac.length; i++)
        {
            macaddress += String.format("%02X%s", mac[i], (i < mac.length - 1) ? ":" : "");
        }
        System.out.println("[" + device.getDisplayName() + "]" + macaddress);
        System.out.println("[" + new String(device.getDisplayName().getBytes("UTF-8")) + "]" + macaddress);
        System.out.println("[" + new String(device.getDisplayName().getBytes("Big5")) + "]" + macaddress);
 
    }
}


Output:
[Marvell Yukon 88E8057 PCI-E Gigabit Ethernet Controller #2 - Packet Scheduler Miniport]:30:F0:A3:0F:06:00
[ÂŪ޸˸m ( ӤH°ϰìºô¸ô]:00:01:64:00:00:00
[ÂŪ޸˸m ( ӤH°ϰìºô¸ô]:00:01:64:00:00:00
[????m (??H�X??????]:00:01:64:00:00:00

正確 Output 應該是:
[Marvell Yukon 88E8057 PCI-E Gigabit Ethernet Controller #2 - Packet Scheduler Miniport]:30:F0:A3:0F:06:00
[藍芽裝置 (個人區域網路) #2]:00:01:64:00:00:00
[藍芽裝置 (個人區域網路) #2]:00:01:64:00:00:00
[????m (??H�X??????]:00:01:64:00:00:00

由 device.getDisplayName() 讀出的資料應該是 utf8 的但不知為何會出現亂碼,我其實是要把資料放入treenode 內,當然放入後是亂碼,所以試print 出 console試試看而發現了問題所在。
OS 是 Windows XP 中文版,JDK 1.6.20。

請各位大大賜教,謝謝