怎样编码字符串 才能让汉字输出正确?
代码如下:
如果用我本地的默认的charset,输出没有问题:
str = new String(str.getBytes(),"GB2312");
如果用charset"ISO-8859-1" ,汉字就无法输出:
str = new String(str.getBytes("ISO-8859-1"),"GB2312");
不同的编码方式间,不能随意相互转换么?
有什么条件?
为什么用UTF-16 也无法显示汉字?
请高手指点下.
--------------------------------
import java.io.* ;
public class Stringc {
public static void main(String[] args) {
try {
String str = "我的java";
System.out.println(str);
str = new String(str.getBytes(),"GB2312");
System.out.println(str);
} catch(UnsupportedEncodingException e) {}
}
}
问题点数:10、回复次数:18Top
1 楼wangdong_hk(王栋)回复于 2005-08-02 20:11:09 得分 0
java默认的编码是unicode,所以您用gb2312编码是不行的!Top
2 楼zhouwen()回复于 2005-08-02 20:21:17 得分 0
java默认的编码是unicode,不需转换,直接支持中文输出。Top
3 楼cozmic(白云出岫醉醉翁)回复于 2005-08-02 20:29:03 得分 0
但是,如果 str是从数据库读出来的字符,应该怎么处理呢?Top
4 楼cozmic(白云出岫醉醉翁)回复于 2005-08-02 20:56:42 得分 0
大家讨论讨论,字符的编码问题吧,解决了另外加分!
谢谢!Top
5 楼mooninsun()回复于 2005-08-02 22:51:37 得分 0
str = new String(str.getBytes("UTF-16"), "UTF-16");
就可以了,
用UTF-16获得编码,并且用UTF-16输出Top
6 楼mooninsun()回复于 2005-08-02 23:04:29 得分 4
而ISO 8859-1,又称Latin-1或“西欧语言”
他是8位字符集,以ASCII为基础.
字符集中没有定义中文字符
在JSP为什么用ISO-8859-1表示中文,我不清楚
但JSP用ISO-8859-1表示中文需要映射才能转化为Unicode,就是在每个字节前加“00”,所以你
str = new String(str.getBytes("ISO-8859-1"),"GB2312")这样输出乱码Top
7 楼ericqxg007(还有很多东西要学(卡卡一米阳光))回复于 2005-08-03 08:35:20 得分 0
不懂 markTop
8 楼cozmic(白云出岫醉醉翁)回复于 2005-08-03 08:52:36 得分 0
谢谢各位!
TO: mooninsun
换成:str = new String(str.getBytes("UTF-16"), "UTF-16");
输出还是不正常。
对编码问题还是一团糟,您有这方面的文档么?
为什么不同的编码方式间,不能随意相互转换?Top
9 楼shoulders(Developer)回复于 2005-08-03 08:54:33 得分 0
str = new String(str.getBytes(),"GB2312");
str.getBytes()这样编码,你未指明编码方式,是说使用平台默认得编码方式,说明你从数据库取出的数已经用gb2312 或者GBK编码过了。Top
10 楼joneyonly()回复于 2005-08-03 09:03:56 得分 0
反正只要保证输入输出数据的编码方式一样的话,输入的是什么,输出就是什么,不会有乱麻Top
11 楼okjohn(大嘴青蛙)回复于 2005-08-03 09:06:38 得分 6
如果用我本地的默认的charset:
str = new String(str.getBytes(),"GB2312");
输出没有问题,那是因为你本地默认的编码方式就是GB2312,即等同于
str = new String(str.getBytes("GB2312"),"GB2312");
如果采用UTF-16,相应的把上句改为
str = new String(str.getBytes("UTF-16"),"UTF-16");
亦可正常输出.
这里需要澄清一下:
str.getBytes("GB2312"); // 得到str的GB2312格式的编码
str.getBytes("UTF-16"); // 得到str的UTF-16格式的编码
在构造函数String(byte[] bytes, String charsetName)中,bytes是若干字符的编码,charsetName是字符集名称(代表编码/解码方式),该函数的作用是将bytes按照charsetName进行解码得出一个String。这里,只要解码方式和bytes本身的编码格式吻合,就可以正常解码。
Top
12 楼okjohn(大嘴青蛙)回复于 2005-08-03 09:11:58 得分 0
UTF-16不行,改为UTF-8应该没有问题!
另外,ISO-8859-1是西文字符集(每个字符的编码均为1个字节),不能表示中文。
可以表示中文的字符集有:GB2312、GBK、UTF-8、UTF-16。Top
13 楼lei198203(lei)回复于 2005-08-03 09:12:52 得分 0
学习Top
14 楼cozmic(白云出岫醉醉翁)回复于 2005-08-03 09:49:07 得分 0
To: mooninsun okjohn
str = new String(str.getBytes("UTF-16"),"UTF-16");
是可以的,刚才输入错了:P
okjohn 说的对:
[引用]
在构造函数String(byte[] bytes, String charsetName)中,bytes是若干字符的编码,charsetName是字符集名称(代表编码/解码方式),该函数的作用是将bytes按照 charsetName进行解码得出一个String。这里,只要解码方式和bytes本身的编码格式吻合,就可以正常解码。
[/引用]
终于 觉悟了!
不同编码集之间的 str.getBytes("XXX") 返回的字节是不样的,因此不可以
随意切换字符编码
-----------
但还有一个问题:
如果我的数据库用的是 ISO-8859-1 编码方式,我写入数据库时用有种文字符
是不是 为了正常输出,是否得改变数据库的编码方式呢?
Top
15 楼okjohn(大嘴青蛙)回复于 2005-08-03 10:09:29 得分 0
这种情况倒没有遇到过,不过我想最好还是改变数据库的编码方式.
如果是ISO-8859-1的话,在数据库中查看时就不能正常显示中文,不过在程序中通过转换是可以还原成中文的.总之比较麻烦.Top
16 楼cozmic(白云出岫醉醉翁)回复于 2005-08-03 10:12:48 得分 0
呵呵~~
那就让麻烦见鬼去吧!~~
结贴!Top
17 楼cozmic(白云出岫醉醉翁)回复于 2005-08-03 10:23:11 得分 0
郁闷!
怎么给多于 帖子分得分数呢?
Top
18 楼luobutou(小箩卜头)回复于 2005-08-06 16:52:06 得分 0
我也碰到这个问题
Top




