JAVA 中文转 UTF-8的问题 这样是正确的,你那样乱转码当然出问题。System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8")); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 同意楼上的,不明白你为什么要多转一次 ).getBytes("GBK")," 还没到环境中测试,我是要把中文转成utf-8,new String("十日一水,五日一石".getBytes("UTF-8"))这样转是个别字出现问号,绝大部分汉字转成utf-8是行的,在测试中碰到"-","老"这样的个别字出现问号,System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));这样转,在中文环境中打印出来的全成中文,不知道在西文环境中是不是也能正常显示成中文,要到环境中测试 System.out.println("yy:"+new String(new String("十日一水,五日一石".getBytes("UTF-8")).getBytes("GBK"),"UTF-8"));这一行是模拟出现的问题,做测试用的 System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));这样应该没问题! System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));这样应该是错了 请教如何将GBK编码的汉字正确转换为UTF-8编码?楼主disremember(disremember)2005-06-07 12:08:15 在 Java / Web 开发 提问我用 String utf8Str = new String(gbkStr.getBytes("GBK"),"UTF-8") 转换后,有些汉字正常,但有些字是乱码,应该怎么转换呢?请高人指教 谢谢 问题点数:20、回复次数:6Top 1 楼jybbh(阿炼)回复于 2005-06-07 12:13:06 得分 20试一下这个 String utf8Str = new String(gbkStr.getBytes("ISO-8859-1"),"UTF-8") Top2 楼disremember(disremember)回复于 2005-06-07 20:15:07 得分 0 to楼上, 不行的,因为gbkStr已经是GBK编码的了,用的方法转更是乱码, 现在的问题关键是GBK转码UTF-8时, 转码有的汉字正常,但有的字是乱码, 例如“所”字,转码后就是乱的。Top3 楼liuquanyi(大狗)回复于 2005-06-07 20:22:42 得分 0 是个问题!Top4 楼disremember(disremember)回复于 2005-06-08 15:29:00 得分 0 MSN上没人搞的了吗/??Top5 楼disremember(disremember)回复于 2005-06-08 17:48:09 得分 0 来人那Top6 楼disremember(disremember)回复于 2005-06-09 16:44:21 得分 0 upupup 应为在GBK和utf-8中,表示一个汉字要的字节数是不同,gbk一般2个,utf-8一般3个。比如把1个汉字用utf-8获取的字节(得到3个字节),在用gbk转为String。得到结果必然出错,变为一个汉字一个问号(在转换时对不符合该格式的都会变问号),如果转换时出现问号,那么这个字节码就彻底丢失了,在转回去,2个正确的+1个问号转不回一个utf-8格式的汉字,就会变2问号 并且有时侯,从utf-8里的3个字节里取出的两个字节,在gbk里没这样的字(想变乱码都变不成),这样第一次就直接变?号了,在转一次问号更多。所有不要用这样的转码方法。除非中间的格式是一个字节的(如iso-8859-1)这样不会错 new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8")这样没解决问题,显示乱码,new String("十日一水,五日一石".getBytes("UTF-8"))部分汉字显示乱码,解决方法应该是怎样? 你知不知道自己当前的 编码类型,strKey=new String(strKey.getBytes("GBK"), //当前编码类型 "UTF-8"); //要转换的类型看下自己工程设置的编码类型。实在不行的话,用死办法。罗列出来 key=new String(strKey.getBytes("iso-8859-1"),"UTF-8"); key=new String(strKey.getBytes("gb2312"),"UTF-8"); key=new String(strKey.getBytes("GBK"),"UTF-8");看看哪个的值对 向西文系统socket服务端写用out.write(new String(str.getBytes("UTF-8"))或out.write(new String(str.getBytes("UTF-8"),"GBK"));部分汉字不能显示,绝大部分正常,怎么颠倒转反而好,用out.write(new String(str.getBytes("GBK"),"UTF-8(gb2312)(ISO-8859-1)"));反而全乱码,搞不懂 out.write(new String(str.getBytes("UTF-8"),"GB2312")); 个别汉字能正常显示out.write(new String(str.getBytes("UTF-8"),"ISO-8859-1"));全乱码out.write(new String(str.getBytes("GBK"),"UTF-8或gb2312或ISO-8859-1)"));全乱码 写到socket里面的怎么是String阿,应该是字节阿。 out.write(new String(str.getBytes("UTF-8"),"GB2312"));你用反了吧,第一个是原始类型的编码,第二个是转换后的编码 向服务端写数据用DataOutputStream类的writeUTF()方法,直接写字符串,不做任何转码,服务端能收到,也能全部显示中文!但跟我要求的服务端接收PrintWriter类的write()方法写,转码就有问题,是跟写服务端的方法有关,请熟悉socket的朋友指教 谢piaopiao11() 和各位,问题已经在另一个贴子解决,是因为我向socket服务端写消息的写法有问题,多谢piaopiao11()在另一个贴子里帮我解决了这个问题 讨论下云计算吧 急! rs.updateRow批量更新问题 在线等高手解决struts2中国际化问题 急求自定义表单数据库设计方案! 导出word jAVA 打印文本文件的问题 RAD6。0里面新建 database connectin遇到问题 iis与tomcat整合问题(急急,100分,在线等) 送80分 JSP问题紧急求助 大家怎么解决eclipse使用template的问题的啊? hibernate criteria关联表查询问题 关于Tomcat端口被占用的问题!
System.out.println("xx:"+new String("十日一水,五日一石".getBytes("UTF-8"),"UTF-8"));这样转,在中文环境中打印出来的全成中文,不知道在西文环境中是不是也能正常显示成中文,要到环境中测试
这一行是模拟出现的问题,做测试用的
这样应该没问题!
这样应该是错了
我用 String utf8Str = new String(gbkStr.getBytes("GBK"),"UTF-8") 转换后,有些汉字正常,但有些字是乱码,应该怎么转换呢?请高人指教
谢谢
问题点数:20、回复次数:6
Top
1 楼jybbh(阿炼)回复于 2005-06-07 12:13:06 得分 20试一下这个
String utf8Str = new String(gbkStr.getBytes("ISO-8859-1"),"UTF-8")
Top2 楼disremember(disremember)回复于 2005-06-07 20:15:07 得分 0 to楼上,
不行的,因为gbkStr已经是GBK编码的了,用的方法转更是乱码,
现在的问题关键是GBK转码UTF-8时, 转码有的汉字正常,但有的字是乱码,
例如“所”字,转码后就是乱的。
Top3 楼liuquanyi(大狗)回复于 2005-06-07 20:22:42 得分 0 是个问题!
Top4 楼disremember(disremember)回复于 2005-06-08 15:29:00 得分 0 MSN上没人搞的了吗/??
Top5 楼disremember(disremember)回复于 2005-06-08 17:48:09 得分 0 来人那
Top6 楼disremember(disremember)回复于 2005-06-09 16:44:21 得分 0 upupup
得到结果必然出错,变为一个汉字一个问号(在转换时对不符合该格式的都会变问号),如果转换时出现问号,那么这个字节码就彻底丢失了,在转回去,2个正确的+1个问号转不回一个utf-8格式的汉字,就会变2问号
"UTF-8"); //要转换的类型看下自己工程设置的编码类型。实在不行的话,用死办法。罗列出来
key=new String(strKey.getBytes("iso-8859-1"),"UTF-8");
key=new String(strKey.getBytes("gb2312"),"UTF-8");
key=new String(strKey.getBytes("GBK"),"UTF-8");看看哪个的值对
out.write(new String(str.getBytes("UTF-8"),"GBK"));部分汉字不能显示,绝大部分正常,怎么颠倒转反而好,用out.write(new String(str.getBytes("GBK"),"UTF-8(gb2312)(ISO-8859-1)"));反而全乱码,搞不懂
out.write(new String(str.getBytes("UTF-8"),"ISO-8859-1"));全乱码out.write(new String(str.getBytes("GBK"),"UTF-8或gb2312或ISO-8859-1)"));全乱码
PrintWriter类的write()方法写,转码就有问题,是跟写服务端的方法有关,请熟悉socket的朋友指教