Java中的UTF-8和UTF-16

前端之家收集整理的这篇文章主要介绍了Java中的UTF-8和UTF-16前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我真的希望下面的字节数据应该显示不同,但事实上,它们是相同的,根据维基 http://en.wikipedia.org/wiki/UTF-8#Examples,字节中的编码看起来不同,但为什么Java打印它们是相同的?
  1. String a = "€";
  2. byte[] utf16 = a.getBytes(); //Java default UTF-16
  3. byte[] utf8 = null;
  4.  
  5. try {
  6. utf8 = a.getBytes("UTF-8");
  7. } catch (UnsupportedEncodingException e) {
  8. throw new RuntimeException(e);
  9. }
  10.  
  11. for (int i = 0 ; i < utf16.length ; i ++){
  12. System.out.println("utf16 = " + utf16[i]);
  13. }
  14.  
  15. for (int i = 0 ; i < utf8.length ; i ++){
  16. System.out.println("utf8 = " + utf8[i]);
  17. }

解决方法

虽然Java在内部将字符保存为UTF-16,但是当您使用String.getBytes()转换为字节时,每个字符都使用默认的平台编码进行转换,这可能类似于 windows-1252.我得到的结果是:
  1. utf16 = -30
  2. utf16 = -126
  3. utf16 = -84
  4. utf8 = -30
  5. utf8 = -126
  6. utf8 = -84

这表示我的系统上的默认编码是“UTF-8”.

另请注意,String.getBytes()的文档具有以下注释:未指定此字符串无法在默认字符集中进行编码时此方法的行为.

但是,一般情况下,如果你总是像使用a.getBytes(“UTF-8”)那样指定一个编码,你就会避免混淆

另外,可能导致混淆的另一件事是直接在源文件中包含Unicode字符:String a =“€”;.该欧元符号必须编码为存储为文件中的一个或多个字节.当Java编译您的程序时,它会看到这些字节并将它们解码回欧元符号.你希望.你必须确保将欧元符号保存到文件中的软件(记事本,eclipse等)以与Java期望的方式相同的方式对其进行编码.UTF-8正变得越来越流行,但它并不普及并且许多编辑器不会以UTF-8编写文件.

猜你在找的Java相关文章