日期:2014-05-18  浏览次数:20734 次

一个关于java URL这个类的用法的问题,读中文的问题
我的问题是,我用如下的方法读取一个html网页的代码,但是读出中文之后,我去查询是否包含某个特定的字符串的时候,总是提示不存在,英文就没问题
不知道是不是编码的问题啊?
谁能帮我解决一下啊?

URL   conn   =   new   URL( "http://news.163.com/world/ ");
InputStream   in   =   conn.openStream();

int   n   =   0;
InputStreamReader   isr   =   new   InputStreamReader(in,   "gbk ");
char[]   ch   =   new   char[1024];

//StringBuffer   sb   =   new   StringBuffer(2000);
String   content   =   " ";
//boolean   flag   =   false;
Pattern   p   =   Pattern.compile( ".* <!--子栏目通栏--> .* ");
Matcher   matcher   =   null;
while   ((n   =   isr.read(ch))   >   0)   {
//isr.read(ch);
content   =   String.valueOf(ch);
matcher   =   p.matcher(content);
if   (matcher.find())
System.out.println( "yes ");
}
isr.close();
in.close();
// Pattern   p   =   Pattern.compile( ".* <!--   国内头条--> .* ");
// Matcher   m   =   p.matcher( "士大 <!--   国内头条--> 夫 ");
// if   (m.find())
// System.out.println( "yes ");
//System.out.println(content);
}   catch   (Exception   e)   {
e.printStackTrace();
}

------解决方案--------------------
也许是两点你没有注意到
1、你这个文件本身的编码是什么
2、下载的那个网页编码是什么
3、InputStreamReader isr = new InputStreamReader(in, "gbk ");这一句指定的编码是什么
最重要的是2和3,如果不一致的话,中文是拿不到的
http://news.163.com/world/ 这个网页的编码是GB2312的,你用GBK应该没有问题

问题应该出在你这个类的文件本身的编码上,改成GBK,或者GB2312就可以了