中文字符集

2023-01-15 07:02:15   文档大全网     [ 字体: ] [ 阅读: ]

#文档大全网# 导语】以下是®文档大全网的小编为您整理的《中文字符集》,欢迎阅读!
字符集,中文
最近一直被这个字符集问题,弄的头疼。想不到一个很好的办法去解决。问题是这样的:超链接中传递参数的时候总是出现乱码Action中用debug查的时候就是乱码,Tomcat中把Service.xml将字符集改成UTF-8,GBK,GB2312都试过了,仍然没有解决这个问题。很是郁闷!~~~

在现实工作中我们会经常遇到字符转换的问题:有的时候还会出现乱码.因为工作需要我从别人的静态网页上抓取数据.用到的方法是传一个uri进去,然后取出你所想得到的字符串.代码如下:

public static String getData(String url1) throws Exception { String result = "";

URL url = new URL(url1);

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true);

PrintWriter out = new PrintWriter(connection.getOutputStream()); out.close();

BufferedReader in = new BufferedReader(new InputStreamReader(connection. getInputStream(),"UTF-8"));

//特别注意这里,后面的编码格式,一般都是用UTF-8,因为这是通用的.如果用汉字可以用GBK.不要用gb2312.因为它是GBK的子集. String line;

while ( (line = in.readLine()) != null) { result = result + "\n" + line; }

in.close();

String html =replaceFunc2(replaceFunc2(result,""),"

",""); return html; }

public static String replaceFunc2(String str_source, String str_start,String str_end) {

String info = "", rep_str = "", rep_str2 = ""; int startFlag = 0, endFlag = 0;

startFlag = str_source.indexOf(str_start); endFlag = str_source.indexOf(str_end);

info = str_source;

if (startFlag >= 0 && endFlag >= 0 && startFlag < endFlag) { rep_str = info.substring(0, startFlag);

rep_str2 = info.substring(endFlag + str_end.length()); info = rep_str + rep_str2; }

// System.out.print("==========="+info+"=========="); return info; }


这样我们取的时候就是强制它用UTF-8的格式从网页中读取出来,而不用它自己默认的编码方式(鬼知道它是用的什么编码格式,因为我是从aspx?xxx动态网页中取的,),听说有一种方法可以查出来它是用的什么编码方式,估计没多少人有这耐心去查.只要读取时用某种格式强制读取就可以,然后用相同的编码方式显示出来,一般没有什么问题.

还有一个就是听别人说的,如果还是出现乱码,哪就先把它转化成unicode格式(UTF-16),这种格式我原来没听说过,又学了一种格式,然后再转成UTF-8的格式. 下面是一些方法 .从网上转来的:

网页写的中文不需要转换,写上你那行就可以显示中文了。凡从jsp传出带中文值的参数,都需要在接收后转换中文<%@ page contentType="text/html; charset=GB2312"%> 是要在本页显示中文的时候才写。它不能完成转换中文的功能。

中文问题是java世界里面一个比较麻烦的问题,说麻烦是因为涉及面太宽,由数据库方面的,操作系统的,webserver的等等。 一般这个就可以了:

str = new String(str.getBytes("编码1"),"编码2");其中编码1是操作系统的默认编码,编码2是你要转换成的编码。

new String()里面的部分的意思是:把str转按照编码1的方式转换回byte[] 字节流,然后按照编码2的方式再转换成新的strstr是一个字符串,java里面其实是char[]str = new String(str.getBytes(),"编码2");编码1省略也是可以的,会按照操作系统的默认编码来转换。其中编码2一般为gb2312,也就是中文,但是推荐用gbk,因为gb2312其实是gbk的一个子集,字库要小一些。utf-8应该也可以,是较新的一种编码规则。

Java Servlets 2.3ServletRequestsetCharacterEncoding(String enc)可以补上在HTTP请求中缺少的charset信息而上面这一烦琐的转换过程就在Servlet引擎中自动完成了,而且Servlet引擎还对转换过程做了优化,提高了运行效率。下面给出一个简单的例子,大家可以做一下比较。 // 传统方式

<%@ page contentType="text/html; charset=gb2312" %>



<%= new String(request.getParameter("your_name").getBytes("8859_1"), "GB2312") %> // 新的方式

<%@ page contentType="text/html; charset=gb2312" %> <% request.setCharacterEncoding("GB2312"); %>




本文来源:https://www.wddqxz.cn/2488b30352ea551810a687a1.html

相关推荐