作者LPH66 ((short)(-15074))
看板java
标题Re: [问题] 中文utf-8与big5互转的问题
时间Sun Dec 7 14:36:41 2008
※ 引述《plokijuh (疯人院院长)》之铭言:
: 是这样的
: 我需要把原本是 utf-8 的编码转成 big5 後 再转回 utf-8 的文字
: 结果我发现这样的互转会有问题
: OS: Windows XP SP3
: JDK: 1.6.0 update 11
: IDE: Eclipse 3.4
: Eclipse设定
: Genel>Workspace: UTF-8
: Project>Resource:UTF-8
: import java.io.UnsupportedEncodingException;
: public class TestRun {
: public static void main(String[] args) throws UnsupportedEncodingException
: {
: String enc = System.getProperty("file.encoding");
: System.out.println(enc);
: String e = "中文转码测试";
: String e5 = new String(e.getBytes("utf-8"),"big5");
: String e8 = new String(e5.getBytes("big5"),"utf-8");
问题在这里
你这个写法
e5是把一个utf-8的字串强制认为它是big5
所以不属於big5编码的符号就变成 '?'(0x3f) 了
e8同样 是把一个big5的字串强制认为它是utf-8 同样会出问题
不认识的字会变成 U+FFFD (utf-8: 0xef 0xbf 0xbd, "REPLACEMENT CHARACTER")
这其实根本不是在做转码...XD
: System.out.println(e);
: byte y[]=e.getBytes("utf-8");
: for (int i=0; i<y.length; i++) {
: System.out.printf("%x ", y[i]);
: }
: System.out.println();
: System.out.println(e5);
: byte x[]=e5.getBytes("big5");
: for (int i=0; i<x.length; i++) {
: System.out.printf("%x ", x[i]);
: }
: System.out.println();
: System.out.println(e8);
: byte z[]=e8.getBytes("utf-8");
: for (int i=0; i<z.length; i++) {
: System.out.printf("%x ", z[i]);
: }
: }
: }
: 结果原始的文字转成 big5 後转不回 utf-8
: 输出结果
: utf-8
: 中文转码测试
: e4 b8 ad e6 96 87 e8 bd 89 e7 a2 bc e6 b8 ac e8 a9 a6
: ????????????
: e4 b8 ad e6 3f e8 bd 3f a2 bc e6 b8 ac e8 a9 a6
: ????????????
: e4 b8 ad ef bf bd 3f ef bf bd 3f ef bf bd ef bf bd e6 b8 ac e8 a9 a6
: 不知道有人遇到过吗?
其实转码这种事只要在输出入时做转码就好了
内部就让它用自己的unicode做事就好
个人以为这正是为什麽java坚持内部一定是unicode的原因...
C/C++这方面就不太好做 你自己必须要清楚你现在存的是什麽编码
有没有什麽奇怪的issue要注意 什麽时候要转 什麽时候直接用就好等等
--
[LPH] Oops, your OOP's a problem? 说:
你现在还是看不到狗?
************* 说:
看得到 只是 他们不会跑 就一直呆呆在那边 一直在起点
[LPH] Oops, your OOP's a problem? 说:
你要按"ㄅㄧㄤˋ"它们才会跑啊@@"
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.84
1F:推 TonyQ:噗哧... 12/07 15:01
2F:推 godfat:说到这,ruby 1.9 的 encoding 弄到好复杂... 目标是希望 12/07 15:48
3F:推 godfat:能同时存在各种 encoding...但我觉得 java 这样简单多了orz 12/07 15:50
4F:推 plokijuh:我的观念有错~感谢大大指正~上了一课 12/07 16:38