CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

怎样编码字符串 才能让汉字输出正确?

楼主cozmic(白云出岫醉醉翁)2005-08-02 19:59:13 在 Java / J2SE / 基础类 提问

代码如下:    
  如果用我本地的默认的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

相关问题

  • 怎样在Unicode编码下输出Ansi字符串?
  • 字符串输出
  • 求一个能生成字符串(包括汉字@-@)的Hex编码的函数!
  • 用base64编码来加密字符串,怎样才能加密汉字?
  • 怎样把unicode编码的汉字字符串转化为ASCII和GB2312编码的,C#里
  • 字符串编码〉???请教
  • 字符串编码问题
  • 怎样输出字符串?
  • 字符串如何输出
  • 字符串输出问题

关键词

  • 编码
  • 字符
  • 字符集
  • 解码
  • 汉字
  • 数据库
  • 函数
  • 中文
  • 转换
  • unicode

得分解答快速导航

  • 帖主:cozmic
  • mooninsun
  • okjohn

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo