论坛首页 Java企业应用论坛

试尽了各种编码,但字符串始终乱码,怀疑此处JDK中本身就乱码了,大家一起来讨论下,还不信就解决不了了

浏览 4289 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-09-09   最后修改:2009-09-10
OO
请管理员不要把这个帖子转到提问区,我主要是想让大家讨论下,谢谢

列出我的笔记本上可用的网络接口,但是,无论如何就是乱码,
我的笔记本是 联想Y430;OS: windows xp pro sp3;JDK: 1.4.2_10
代码非常简单,如下:
package examples.a06;

import java.net.NetworkInterface;
import java.util.Enumeration;

public class InterfaceLister {
    public static void main(String[] args) throws Exception {
        Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) interfaces.nextElement();
            System.out.println(ni);
        }
    }
}

输出是:
name:lo (MS TCP Loopback interface) index: 1 addresses:
/127.0.0.1;

name:eth0 (W-ibeda virtual adapter - ????ü??????ò?????) index: 2 addresses:

name:eth1 (Broadcom NetLink (TM) Fast Ethernet - ????ü??????ò?????) index: 65540 addresses:
/192.168.0.100;

name:eth2 (Intel(R) Wireless WiFi Link 5100 - ????ü??????ò?????) index: 458757 addresses:

name:ppp0 (WAN (PPP/SLIP) Interface) index: 786438 addresses:
/117.88.171.252;

我甚至把程序改成如下,但还是不能得到正确的结果:
package examples.a06;

import java.net.NetworkInterface;
import java.util.Enumeration;

public class InterfaceLister {
    public static final String[] ENCODEING = { "iso-8859-1", "gb2312",
            "gbk", "big5", "gb18030", "utf-8", "utf-16"};

    public static void main(String[] args) throws Exception {
        Enumeration interfaces = NetworkInterface.getNetworkInterfaces();
        while (interfaces.hasMoreElements()) {
            NetworkInterface ni = (NetworkInterface) interfaces.nextElement();
            String strDisplay = ni.toString();
            for (int i = 0; i < ENCODEING.length; i++) {
                byte[] bArray = strDisplay.getBytes(ENCODEING[i]);
                for (int k = 0; k < ENCODEING.length; k++) {
                    String newStr = new String(bArray, ENCODEING[k]);
                    System.out.println(ENCODEING[i] + "-->" + ENCODEING[k]);
                    System.out.println(newStr);
                    System.out
                            .println("***************************************");
                }
            }

        }
    }
}


我怀疑这个JDK的一个bug,也就是说,NetworkInterface 中的 displayName 在JDK内部就是乱码的,否则不会出现这种情况的

另外:在CSDN上挂了好几天,也没人能解决这个问题,所以,发到这里和大家一起讨论下,我还就不信了这个问题不能解决了
   发表时间:2009-09-09   最后修改:2009-09-09
我的机器上没乱码(不过不是联想……而且没非 ascii 字符)

或许是你的控制台编码有问题。试着打印到文件看看。

(程序不用改,
java InterfaceLister > res.txt
然后 tellenc res.txt)
0 请登录后投票
   发表时间:2009-09-10  
name:net0 (WAN Miniport (SSTP)) index: 2 addresses:

name:net1 (WAN Miniport (IKEv2)) index: 3 addresses:

name:net2 (WAN Miniport (L2TP)) index: 4 addresses:

name:net3 (WAN Miniport (PPTP)) index: 5 addresses:

name:ppp0 (WAN Miniport (PPPOE)) index: 6 addresses:

name:eth0 (WAN Miniport (IPv6)) index: 7 addresses:

name:eth1 (WAN Miniport (Network Monitor)) index: 8 addresses:

name:eth2 (WAN Miniport (IP)) index: 9 addresses:

name:ppp1 (RAS Async Adapter) index: 10 addresses:

你看,好似你乱码都是括号里面的那部分协议
我怀疑是你装JDK时的系统编码和现在系统的编码不一致了.

我以前也出现过类似的问题,java里面输出中文但是在console里面不支持。
0 请登录后投票
   发表时间:2009-09-10  
會不會是系統的問題?在我這裡也沒有亂碼……
0 请登录后投票
   发表时间:2009-09-10  
yanwt 写道
你运行环境是什么?用的什么编译器?


OS:Windows Xp pro   sp3

JDK: 1.4.2_10
0 请登录后投票
   发表时间:2009-09-10  
xieboxin 写道
會不會是系統的問題?在我這裡也沒有亂碼……

应该不是系统的问题,其他人也有碰到此问题的。

在CSDN上也讨论过这个问题,链接:
http://topic.csdn.net/u/20090907/15/6cfd3b1b-2d15-4633-b426-0a1fcfd02dc6.html?08481355708463789
0 请登录后投票
   发表时间:2009-09-10   最后修改:2009-09-10
检查一下你的控制台(dos窗口,属性)codepage
0 请登录后投票
   发表时间:2009-09-10  
检查一下你目前编辑环境使用的编码。
0 请登录后投票
   发表时间:2009-09-10  
我也碰到过
比如文件是utf-8的,在windows下使用某个stream并且没有地方设置编码的话,可能就会出现这个问题
0 请登录后投票
   发表时间:2009-09-10  
基本上都用jdk1.5 也有很多人用jdk1.6了 jdk1.4不稳定
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics