乱码问题好像跟我们中国程序员特别有缘,一直困扰着我们,从开始的JSP乱码问题,STRUTS乱码问题,到现在的AJAX乱码问题,无一不是搞得许多程序员焦头烂额的,整天骂XXX产品对中文支持不了,UTF-8无法使用中文啊什么的,其实这里面被骂的产品中其实99%以上是对中文支持非常好的,而出现乱码的原因只是因为自身对国际化支持以及文件编码等信息的认识不知造成的。要知道一个产品那么流行,怎么可能对中文支持不了呢,下面就开始一一帮大家解决这些问题。
1 、编码
-- 想要解决好中文问题,对编码肯定是不能一概不懂了,编码是解决中文乱码问题的根本。
编码比较常用的有: UTF-8 , GBK , GB2312 , ISO-8859-1 ,除了 iso-8859-1 之外的其它三个编码都能很好的支持中文,但它们都兼容 ISO-8859-1 的编码(就是说无论编码怎么改变,只要是ISO-8859-1中的字符,永远不会出现乱码)。
这四种编码中, GB2312 是中国规定的汉字编码,也可以说是简体中文的字符集编码 ; GBK 是 GB2312 的扩展 , 除了兼容 GB2312 外,它还能显示繁体中文,还有日文的假名 ; 而 UTF-8 虽然也支持中文,但却与GB码不兼容(编码值不同)。 UTF-8 使用的是可变长的UNICODE编码,编码可能是1位16进制(即 ISO-8859-1中的字符,其编码也是相同的)也有可能是2位或3位的16进制。 UTF-8 的优点是:
1 、与CPU字节顺序无关,可以在不同平台之间交流。
1 、编码
-- 想要解决好中文问题,对编码肯定是不能一概不懂了,编码是解决中文乱码问题的根本。
编码比较常用的有: UTF-8 , GBK , GB2312 , ISO-8859-1 ,除了 iso-8859-1 之外的其它三个编码都能很好的支持中文,但它们都兼容 ISO-8859-1 的编码(就是说无论编码怎么改变,只要是ISO-8859-1中的字符,永远不会出现乱码)。
这四种编码中, GB2312 是中国规定的汉字编码,也可以说是简体中文的字符集编码 ; GBK 是 GB2312 的扩展 , 除了兼容 GB2312 外,它还能显示繁体中文,还有日文的假名 ; 而 UTF-8 虽然也支持中文,但却与GB码不兼容(编码值不同)。 UTF-8 使用的是可变长的UNICODE编码,编码可能是1位16进制(即 ISO-8859-1中的字符,其编码也是相同的)也有可能是2位或3位的16进制。 UTF-8 的优点是:
1 、与CPU字节顺序无关,可以在不同平台之间交流。
Tags: 乱码
如果web application的编码规则是utf-8,如网页头中的:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
那么js文件中如果有中文输出就会出现乱码,解决此个问题可在引用javascript输出的地方加上charset="gb2312" 或 charset="big5"(假设输出的是Big5繁体字)。
例:
<script type="text/javascript" language="javascript" src="scripts/output.js" charset="gb2312"></script>
PS:另一种解决方法是把js文件保存为utf-8编码。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
那么js文件中如果有中文输出就会出现乱码,解决此个问题可在引用javascript输出的地方加上charset="gb2312" 或 charset="big5"(假设输出的是Big5繁体字)。
例:
<script type="text/javascript" language="javascript" src="scripts/output.js" charset="gb2312"></script>
PS:另一种解决方法是把js文件保存为utf-8编码。
这两天一直在搞静态化页面,其实一片文章的模版替换倒是不难,只是在编码问题上卡住了一阵。
我的这个CMS系统使用的是UTF-8,在静态化页面的时需要在程序中指定编码,不然默认GB2312.如:
反之,在读取模版的时候一样页需要转码:
我的这个CMS系统使用的是UTF-8,在静态化页面的时需要在程序中指定编码,不然默认GB2312.如:
复制内容到剪贴板 程序代码
byte tag_bytes[] = templateContent.getBytes("UTF-8");
fileoutputstream.write(tag_bytes);
fileoutputstream.write(tag_bytes);
反之,在读取模版的时候一样页需要转码:
复制内容到剪贴板 程序代码
String templateContent = "";
FileInputStream fileinputstream = new FileInputStream(filePath);// 读取模块文件
int lenght = fileinputstream.available();
FileInputStream fileinputstream = new FileInputStream(filePath);// 读取模块文件
int lenght = fileinputstream.available();