zoukankan      html  css  js  c++  java
  • String.getBytes("Unicode")的疑问 以及 SHIFTJIS编码范围

    String.getBytes(charsetName),这个方法很多人都用过,可是有没有试过temp.getBytes("Unicode");这样的用法,它的返回值很奇怪,第1和第2个字节是-1或-2,比如下面的代码,你能想象出它的结果吗?     

            String temp = "a";

            try {

                byte[] unicodes = temp.getBytes("Unicode");

                System.out.println("unicodes=" + unicodes.length);
                for (int i = 0; i < unicodes.length; i++) {
                    System.out.println(unicodes[i]);
                }

                unicodes = temp.getBytes("UnicodeLittleUnmarked");
                System.out.println("unicodes=" + unicodes.length);
                for (int i = 0; i < unicodes.length; i++) {
                    System.out.println(unicodes[i]);
                }
               
                unicodes = temp.getBytes("UnicodeBigUnmarked");
                System.out.println("unicodes=" + unicodes.length);
                for (int i = 0; i < unicodes.length; i++) {
                    System.out.println(unicodes[i]);
                }

            } catch (UnsupportedEncodingException e) {           
                e.printStackTrace();
            }

    输出结果:

    unicodes=4
    -1
    -2
    97
    0
    unicodes=2
    97
    0

    unicodes=2
    0
    97

    为什么会有这种结果呢?蓝色的返回了四个字节,-1,-2,是字节顺的一种表示,这是由sun的类库实现,指示如果没有指定字节就使用默认的UnicodeLittle(在Window平台,别的平台我没测试),但为了标识这种字节顺,就使用了-1,-2在前面表示。

    黑色的字,是UnicodeLittleUnmarked的结果,其返回字节只是两个字节,这与Unicode的编码相符合,注意到97,0与使用Unicode时后两个字节顺序一样。

    红色的字,是使用UnicodeBigUnmarked的结果,字节顺与Little相反,也没有-1,-2.

    由以上应该知道,temp.getBytes("Unicode");应该小心使用,应该注意它返回的-1,-2,这两 个字节,因为在一些网络程序中,特别是当对方是由java以外的语言编写,有可能不会使用这种方式来标识字节顺,因此要了解对方的细节,这样才能保证数据 的准确传递。






    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    想把一个文件中的日文部分提取出来,可是其他的东西都不知道是什么,好在还能查到SHIFT-JIS编码的范围。有个范围怎么着还是能将就是把文字提出来,只是没有格式罢了。转自:http://blog.csdn.net/walacewang/archive/2006/03/03/614382.aspx

    Shift_JIS是一个日本电脑系统常用的编码表。它能容纳全形及半形拉丁字母、平假名、片假名、符号及日语汉字。

    它被命名为Shift_JIS的原因,是它在放置全形字符时,要避开原本在0xA1-0xDF放置的半角假名字符。

    在微软及IBM的日语电脑系统中,即使用了这个编码表。这个编码表称为CP932。

    字节结构
    以下字元在Shift_JIS使用一个字节来表示。

    ASCII字符 (0×20-0×7E),但”\”被\\”¥”取代
    ASCII控制字符 (0×00-0×1F、0×7F)
    JIS X 0201标准内的半角标点及片假名(0xA1-0xDF)
    在部分操作系统中,0xA0用来放置”不换行空格\\”。
    以下字元在Shift_JIS使用两个字节来表示。

    JIS X 0208字集的所有字符

    “第一位字节\\”使用0×81-0×9F、0xE0-0xEF (共47个)
    “第二位字节\\”使用0×40-0×7E、0×80-0xFC (共188个)

    使用者定义区

    “第一位字节\\”使用0xF0-0xFC (共47个)
    “第二位字节\\”使用0×40-0×7E、0×80-0xFC (共188个)

    在Shift_JIS编码表中,并未使用0xFD、0xFE及0xFF。

    在微软及IBM的日语电脑系统中,在0xFA、0xFB及0xFC的两字节区域,加入了388个JIS X 0208没有收录的符号和汉字。


  • 相关阅读:
    debug:am dumpheap命令源码分析
    Android12系统源码分析:NativeTombstoneManager
    性能工具|ANRdaemon
    exampleappcoldstartbinder.trace
    debug:am profile命令的实现
    android studio的巨坑笔记
    android studio获取签名哈希
    Nginx配置反向代理 proxy_pass King
    Nginx配置反向代理 rewrite King
    Nginx配置文件nginx.conf详解 King
  • 原文地址:https://www.cnblogs.com/pony/p/1240611.html
Copyright © 2011-2022 走看看