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编码。这些知识点在信息...
在描述中,“编码转换工具 字符集编码对比字符集编码对比字符集编码对比”重复强调了编码对比这一功能,可能意味着此工具具有深度解析和展示编码差异的能力。 字符集,简单来说,是定义一组特定字符的集合,比如...
对于“Gb2312字符集编码.htm”和“GBK字符集编码.htm”这两个文件,我们可以推测它们分别展示了GB2312和GBK字符集的具体内容和使用示例,可能包括了这两个字符集的编码规则、覆盖的字符范围以及如何在实际应用中进行...
### 维吾尔文字符集Unicode编码表 #### 概述 本文档提供了一份详细的现代维吾尔文字符集的Unicode编码表。这份表格对于理解、处理和展示维吾尔语文字具有重要意义。通过这份表格,我们可以清晰地看到每一个维吾尔文...
### Linux字符集编码指南 #### 一、引言 在多语言环境中,字符编码的转换是必不可少的一个环节。尤其是在Linux环境下,由于其广泛的应用场景和灵活性,字符编码问题显得尤为重要。本文将详细介绍如何在Linux系统中...
这里的`AMERICAN_AMERICA`表示语言和地区,而`UTF8`则表示字符集编码。 #### 四、理解NLS_LANG参数 - **NLS_LANG**:该环境变量用于定义客户端的区域设置,包括语言、地区和字符集。 - **LANGUAGE**:指定客户端...
总结而言,字符集编码的选择和使用直接影响到数据的存储、传输和展示效果。随着全球化的发展,Unicode及其变种如UTF-8已成为国际间数据交换的首选编码,它不仅解决了多语言字符的兼容性问题,也为未来新字符的加入...
总的来说,“五笔字型超大字符集编码数据库.zip”是一个重要的资源,它不仅扩展了五笔字型的适用范围,也展示了字符编码技术与输入法的紧密结合。理解和利用这个数据库,有助于提升汉字输入的效率和体验,对于汉字...
这展示了文件如何存储和展示汉字,每个汉字由其对应的UTF-8编码表示。 #### 应用场景 1. **验证码生成**:在网站登录、表单提交等环节,使用随机生成的常用汉字作为验证码,可以有效防止自动化攻击,提升系统安全...
例如,1602字符集.jpg文件可能是提供给开发者的一个参考图,它展示了1602字符集中所有128个字符的可视化表示。通过查看这张图片,用户可以了解每个字符的外观,并据此编写代码来显示特定的文本。在处理自定义字符或...
### Unicode汉字字符集详解 #### 一、Unicode简介 Unicode是一种国际编码标准,旨在为所有书写语言中的每个字符提供唯一的数字。它不仅包括了西文字符,还包含了各种语言文字,如汉字、日文、韩文等。Unicode的...
- **定义**:Unicode是一种国际化的字符集标准,旨在为每种语言中的每个字符分配一个唯一的数字。 - **特点**: - 使用固定长度或可变长度编码。 - 包括多种编码形式,如UTF-8、UTF-16、UTF-32等。 - 支持世界上...
Oracle字符集的命名遵循特定的模式:<Language><bitsize>,例如,`ZHS16GBK`表示这是一个简体中文字符集,使用GBK编码,每个字符占用16位(即两个字节)。这一规则确保了字符集的明确性和可识别性,便于管理和维护。...
标题中的“Fontcreate用Unicode编码下较完整的字符集分类压缩包”表明这是一份与字体设计软件Fontcreate相关的资源包,其中包含了使用Unicode编码的各种字符集合。Unicode是一种国际标准,旨在为全球所有语言提供一...
总之,Oracle字符集是数据库设计和管理中的一个重要概念,它影响着数据的存储、检索和展示。理解字符集的原理、选择合适的字符集以及正确设置NLS_LANG环境变量,可以避免许多与字符集相关的错误,确保数据的准确性和...
ASCII码的每个字符占用一个字节,最高位为0,因此它只能表示128个不同的值,这对于英文这样的单字节字符集来说已经足够。 然而,随着计算机技术的发展,全球化的交流需求日益增强,ASCII码无法满足非英文字符,特别...
在压缩包中的`unicode.png`、`utf8.png`和`gbk.png`这些图片文件,可能是用来辅助说明不同编码下的字符展示效果,比如对比不同编码下的汉字或特殊字符显示差异,帮助用户理解和选择合适的编码。 总之,字符编码转换...
在浏览某些含有非标准或不常见的字符集的网页时,谷歌浏览器可能会遇到编码不匹配的问题,导致乱码出现。这时,字符编码插件就显得尤为重要。这类插件通常提供一键切换字符编码的功能,帮助用户快速解决由于编码不...
例如,"cp936"字符集主要用于支持简体中文环境,其全称为“Chinese People's Republic Simplified Chinese”,是一种双字节编码方案,能够准确表示GB2312标准下的所有汉字及其扩展字符。 ### 修改Sybase字符集的...