救急!中文问题!!utf-8编码转成GBK,因为位数不同而产生字符丢掉问题!!

beming 2002-11-12 03:02:52
天啊,又是中文问题:utf-8编码转成GBK,因为位数不同而产生字符丢掉问题!!

某个字段是中文字段,需要将这个字段转成成unicode编码(utf-8去getBytes):
str=new String(s.getBytes("UTF-8"),"ISO8859-1");

无论这个字段是奇数或者偶数个中文字,都没有发现丢掉汉字的问题。

但是经过
str=new String(s.getBytes("ISO8859-1"),"GBK");
处理过之后,发现偶数个中文字没有问题,但是奇数个中文字的最后一个汉字给丢掉啦!!
怎么办啊??
我必须要这样处理啊 ,我必须要想用str=new String(s.getBytes("UTF-8"),"ISO8859-1");这样处理,之后再要将这个str转换成"GBK"编码啊!!
...全文
124 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
beming 2002-11-22
  • 打赏
  • 举报
回复
或者谁可以告诉我把怎么样把字节数组写到文件中呢??
beming 2002-11-22
  • 打赏
  • 举报
回复
问题也有进展

现在需要找sun.io这个包,请问谁知道哪里可以下载呢???
xiaofenguser 2002-11-15
  • 打赏
  • 举报
回复
能不能把奇数个的在转化之前判断一下,是的话加一个字进去,转化完成之后,再去掉

beming 2002-11-15
  • 打赏
  • 举报
回复
这个我早已试过,也会出现问题,不能正确处理。
我现在用字节数组,用三个三个处理(因为一个汉字对应UTF-8时是三个字节)。不过要补多一个byte凑成四位
显示是正常,但是取出来再转的时候就有问题啦。

beming 2002-11-14
  • 打赏
  • 举报
回复
大家给点提示吧~!
beming 2002-11-13
  • 打赏
  • 举报
回复
to:hotenM

我已经试过,但是奇数个中文字就出现全部丢失现象,如果是偶数个就没有问题
beming 2002-11-13
  • 打赏
  • 举报
回复
不行啊,你有没有试过奇数个中文字??
hotenM 2002-11-12
  • 打赏
  • 举报
回复
new String(s.getBytes("UTF-8"),"gb2312");
这样不行吗,我都是这样做的
beming 2002-11-12
  • 打赏
  • 举报
回复
我已经参考过:

utf-8
  --utf-8是和unicode一一对应的,其实现很简单
  --
   -- 7位的unicode: 0 _ _ _ _ _ _ _
  --11位的unicode: 1 1 0 _ _ _ _ _ 1 0 _ _ _ _ _ _
  --16位的unicode: 1 1 1 0 _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
  --21位的unicode: 1 1 1 1 0 _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _ 1 0 _ _ _ _ _ _
  --大多数情况是只使用到16位以下的unicode:
  --"你"的gb码是:0xc4e3 ,unicode是0x4f60
  --我们还是用上面的例子
  --  --例1:0xc4e3的二进制:
  --  --    1 1 0 0 0 1 0 0 1 1 1 0 0 0 1 1
  --  --    由于只有两位我们按照两位的编码来排,但是我们发现这行不通,
  --  --    因为第7位不是0因此,返回"?"
  --  --   
  --  --例2:0x4f60的二进制:
  --  --    0 1 0 0 1 1 1 1 0 1 1 0 0 0 0 0
  --  --    我们用utf-8补齐,变成:
  --  --    11100100 10111101 10100000
  --  --    e4--bd-- a0
  --  --    于是返回0xe4,0xbd,0xa0
  --  --
  3.string和byte[]
  --string其实核心是char[],然而要把byte转化成string,必须经过编码。
  --string.length()其实就是char数组的长度,如果使用不同的编码,很可
  --能会错分,造成散字和乱码。
  --例:
  ----byte [] b={(byte)'\u00c4',(byte)'\u00e3'};
  ----string str=new string(b,encoding);  ----
  ----如果encoding=8859_1,会有两个字,但是encoding=gb2312只有一个字  ----
  --这个问题在处理分页是经常发生


但是我不知道应该怎么处理
谁有高见,请指点指点,分不够可以再加!!!!!

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧