`

展示字符集编码表示

 
阅读更多
import java.nio.ByteBuffer;
import java.nio.charset.Charset;

/**
 * Charset encoding test.  Run the same input string, which contains
 * some non-ascii characters, through several Charset encoders and dump out
 * the hex values of the resulting byte sequences.
 */
public class DecodeTest {
    public static void main(String[] args) {
        // This is the character sequence to encode 
        String input = "\u00bfMa\u00f1ana?";
        String [] charsetNames = {
                "US-ASCII", "ISO-8859-1", "UTF-8", "UTF-16BE",
                "UTF-16LE", "UTF-16"
        };
        for (int i = 0; i < charsetNames.length; i++) {
            doEncode (Charset.forName(charsetNames[i]), input);
        }
    }

    private static void doEncode(Charset cs, String input) {
        ByteBuffer bb = cs.encode(input);
        System.out.println("Charset: " + cs.name());
        System.out.println("  input :" + input);
        System.out.println("Encoded: " );
        for (int i = 0; bb.hasRemaining(); i++) {
            int b = bb.get();
            int ival = ((int) b) & 0xff;
            char c = (char) ival;
            // Keep tabular alignment pretty
            if (i < 10) System.out.print(" ");
            // Print index number
            System.out.print("  " + i + ": ");
            // Better formatted output is coming someday...
            if (ival < 16) System.out.print("0");
            // Print the hex value of  the byte
            System.out.print(Integer.toHexString(ival));
            // If the byte seems to be the value of a
            // printable character, print it.  No guarantee
            // it will be.
            if (Character.isWhitespace(c) || Character.isISOControl(c)) {
                System.out.println("");
            } else {
                System.out.println(" (" + c + ")");
            }
        }
        System.out.println("");
    }
}


输出结果
Charset: US-ASCII
  input :¿Mañana?
Encoded: 
   0: 3f (?)
   1: 4d (M)
   2: 61 (a)
   3: 3f (?)
   4: 61 (a)
   5: 6e (n)
   6: 61 (a)
   7: 3f (?)

Charset: ISO-8859-1
  input :¿Mañana?
Encoded: 
   0: bf (¿)
   1: 4d (M)
   2: 61 (a)
   3: f1 (ñ)
   4: 61 (a)
   5: 6e (n)
   6: 61 (a)
   7: 3f (?)

Charset: UTF-8
  input :¿Mañana?
Encoded: 
   0: c2 (Â)
   1: bf (¿)
   2: 4d (M)
   3: 61 (a)
   4: c3 (Ã)
   5: b1 (±)
   6: 61 (a)
   7: 6e (n)
   8: 61 (a)
   9: 3f (?)

Charset: UTF-16BE
  input :¿Mañana?
Encoded: 
   0: 00
   1: bf (¿)
   2: 00
   3: 4d (M)
   4: 00
   5: 61 (a)
   6: 00
   7: f1 (ñ)
   8: 00
   9: 61 (a)
  10: 00
  11: 6e (n)
  12: 00
  13: 61 (a)
  14: 00
  15: 3f (?)

Charset: UTF-16LE
  input :¿Mañana?
Encoded: 
   0: bf (¿)
   1: 00
   2: 4d (M)
   3: 00
   4: 61 (a)
   5: 00
   6: f1 (ñ)
   7: 00
   8: 61 (a)
   9: 00
  10: 6e (n)
  11: 00
  12: 61 (a)
  13: 00
  14: 3f (?)
  15: 00

Charset: UTF-16
  input :¿Mañana?
Encoded: 
   0: fe (þ)
   1: ff (ÿ)
   2: 00
   3: bf (¿)
   4: 00
   5: 4d (M)
   6: 00
   7: 61 (a)
   8: 00
   9: f1 (ñ)
  10: 00
  11: 61 (a)
  12: 00
  13: 6e (n)
  14: 00
  15: 61 (a)
  16: 00
  17: 3f (?)


UTF -16BE 和UTF -16LE把每个字符编码为一个 2-字节数值。因此这类编码的解码器必须
要预先了解数据是如何编码的,或者根据编码数据流本身来确定字节顺序的方式。UTF -16
编码承认一种字节顺序标记:Unicode字符\uFEFF 。只有发生在编码流的开端时字节顺序
标记才表现为其特殊含义。如果之后遇到该值,它是根据其定义的 Unicode 值(零宽度,
无间断空格)被映射。外来的,小字节序系统可能会优先考虑\ uFEF 并且把流编码为
UTF -16LE。使用UTF -16编码优先考虑和认可字节顺序标记使系统带有不同的内部字节顺
序,从而与 Unicode数据交流

UTF-16BE无字节标记,编码高位字序
UTF-16LE无字节标记,编码低位字序


更多信息请参考: orelly出版的 java nio 第6章.
分享到:
评论

相关推荐

    字符集编码查询/反查工具

    字符集编码是计算机科学中的一个重要概念,涉及到数据的存储、传输和显示。在这个"字符集编码查询/反查工具"中,我们可以看到涉及到的关键技术包括字符集、二进制、十六进制、Base64以及URL编码。这些知识点在信息...

    codeview 字符集编码对比

    在描述中,“编码转换工具 字符集编码对比字符集编码对比字符集编码对比”重复强调了编码对比这一功能,可能意味着此工具具有深度解析和展示编码差异的能力。 字符集,简单来说,是定义一组特定字符的集合,比如...

    维吾尔文字符集unicode编码表

    ### 维吾尔文字符集Unicode编码表 #### 概述 本文档提供了一份详细的现代维吾尔文字符集的Unicode编码表。这份表格对于理解、处理和展示维吾尔语文字具有重要意义。通过这份表格,我们可以清晰地看到每一个维吾尔文...

    字符集编码

    对于“Gb2312字符集编码.htm”和“GBK字符集编码.htm”这两个文件,我们可以推测它们分别展示了GB2312和GBK字符集的具体内容和使用示例,可能包括了这两个字符集的编码规则、覆盖的字符范围以及如何在实际应用中进行...

    linux字符集编码指南

    ### Linux字符集编码指南 #### 一、引言 在多语言环境中,字符编码的转换是必不可少的一个环节。尤其是在Linux环境下,由于其广泛的应用场景和灵活性,字符编码问题显得尤为重要。本文将详细介绍如何在Linux系统中...

    oracle字符集的查看和client字符集的修改

    这里的`AMERICAN_AMERICA`表示语言和地区,而`UTF8`则表示字符集编码。 #### 四、理解NLS_LANG参数 - **NLS_LANG**:该环境变量用于定义客户端的区域设置,包括语言、地区和字符集。 - **LANGUAGE**:指定客户端...

    常用字符集编码详解

    总结而言,字符集编码的选择和使用直接影响到数据的存储、传输和展示效果。随着全球化的发展,Unicode及其变种如UTF-8已成为国际间数据交换的首选编码,它不仅解决了多语言字符的兼容性问题,也为未来新字符的加入...

    五笔字型超大字符集编码数据库.zip

    总的来说,“五笔字型超大字符集编码数据库.zip”是一个重要的资源,它不仅扩展了五笔字型的适用范围,也展示了字符编码技术与输入法的紧密结合。理解和利用这个数据库,有助于提升汉字输入的效率和体验,对于汉字...

    常用汉字utf-8字符集.txt

    这展示了文件如何存储和展示汉字,每个汉字由其对应的UTF-8编码表示。 #### 应用场景 1. **验证码生成**:在网站登录、表单提交等环节,使用随机生成的常用汉字作为验证码,可以有效防止自动化攻击,提升系统安全...

    ---------实用1602字符集

    例如,1602字符集.jpg文件可能是提供给开发者的一个参考图,它展示了1602字符集中所有128个字符的可视化表示。通过查看这张图片,用户可以了解每个字符的外观,并据此编写代码来显示特定的文本。在处理自定义字符或...

    unicode 汉字字符集

    ### Unicode汉字字符集详解 #### 一、Unicode简介 Unicode是一种国际编码标准,旨在为所有书写语言中的每个字符提供唯一的数字。它不仅包括了西文字符,还包含了各种语言文字,如汉字、日文、韩文等。Unicode的...

    判断字符编码格式代码

    - **定义**:Unicode是一种国际化的字符集标准,旨在为每种语言中的每个字符分配一个唯一的数字。 - **特点**: - 使用固定长度或可变长度编码。 - 包括多种编码形式,如UTF-8、UTF-16、UTF-32等。 - 支持世界上...

    熟知Oracle字符集

    Oracle字符集的命名遵循特定的模式:&lt;Language&gt;&lt;bitsize&gt;,例如,`ZHS16GBK`表示这是一个简体中文字符集,使用GBK编码,每个字符占用16位(即两个字节)。这一规则确保了字符集的明确性和可识别性,便于管理和维护。...

    Fontcreate用Unicode编码下较完整的字符集分类压缩包

    标题中的“Fontcreate用Unicode编码下较完整的字符集分类压缩包”表明这是一份与字体设计软件Fontcreate相关的资源包,其中包含了使用Unicode编码的各种字符集合。Unicode是一种国际标准,旨在为全球所有语言提供一...

    Oracle字符集问题

    总之,Oracle字符集是数据库设计和管理中的一个重要概念,它影响着数据的存储、检索和展示。理解字符集的原理、选择合适的字符集以及正确设置NLS_LANG环境变量,可以避免许多与字符集相关的错误,确保数据的准确性和...

    ASCII码和Unicode中韩字符集(包括简体和繁体中文)很强大

    ASCII码的每个字符占用一个字节,最高位为0,因此它只能表示128个不同的值,这对于英文这样的单字节字符集来说已经足够。 然而,随着计算机技术的发展,全球化的交流需求日益增强,ASCII码无法满足非英文字符,特别...

    字符编码转换,支持任意编码

    在压缩包中的`unicode.png`、`utf8.png`和`gbk.png`这些图片文件,可能是用来辅助说明不同编码下的字符展示效果,比如对比不同编码下的汉字或特殊字符显示差异,帮助用户理解和选择合适的编码。 总之,字符编码转换...

    谷歌浏览器-字符编码插件

    在浏览某些含有非标准或不常见的字符集的网页时,谷歌浏览器可能会遇到编码不匹配的问题,导致乱码出现。这时,字符编码插件就显得尤为重要。这类插件通常提供一键切换字符编码的功能,帮助用户快速解决由于编码不...

    sybase 修改字符集

    例如,"cp936"字符集主要用于支持简体中文环境,其全称为“Chinese People's Republic Simplified Chinese”,是一种双字节编码方案,能够准确表示GB2312标准下的所有汉字及其扩展字符。 ### 修改Sybase字符集的...

Global site tag (gtag.js) - Google Analytics