java字符编码相关
JAVA中转义字符:?
1.八进制转义序列:\ + 1到3位5数字;范围'\000'~'\377'?
????? \0:空字符?
2.Unicode转义字符:\u + 四个十六进制数字;0~65535?
???? \u0000:空字符?
3.特殊字符:就3个?
????? ":双引号?
???? \':单引号?
???? \\:反斜线?
4.控制字符:5个?
??
\' 单引号字符?
\\ 反斜杠字符?
\r 回车?
\n 换行?
\f 走纸换页?
\t 横向跳格?
\b 退格?
点的转义:. ==> u002E?
美元符号的转义:$ ==> u0024?
乘方符号的转义:^ ==> u005E?
左大括号的转义:{ ==> u007B?
左方括号的转义:[ ==> u005B?
左圆括号的转义:( ==> u0028?
竖线的转义:| ==> u007C?
右圆括号的转义:) ==> u0029?
星号的转义:* ==> u002A?
加号的转义:+ ==> u002B?
问号的转义:? ==> u003F?
反斜杠的转义: ==> u005C?
?
?
Java对在字符串字面常量中的Unicode转义字符没有提供任何特殊处理。编译器在将程序解析成各种符号之前,先将Unicode转义字符转换成为它们所表示的字符[JLS 3.2]。因此,程序中的第一个Unicode转义字符将作为一个单字符字符串字面常量("a")的结束引号,而第二个Unicode转义字符将作为另一个单字符字符串字面常量("b")的开始引号。程序打印的是表达式"a".length()+"b".length(),即2。?
?
许多字符都有相应的转义字符序列,包括单引号(\')、换行(\n)、制表符(\t)和反斜线(\\)。你可以在字符字面常量和字符串字面常量中使用转义字符序列。?
实际上,你可以通过使用被称为八进制转义字符的特殊类型的转义字符序列,将任何ASCII字符置于一个字符串字面常量或一个字符字面常量中,但是最好是尽可能地使用普通的转义字符序列。?
普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的。?
ASCII是字符集的最小公共特性集,它只有128个字符,但是Unicode有超过65,000个字符。一个Unicode转义字符可以被用来在只使用ASCII字符的程序中插入一个Unicode字符。一个Unicode转义字符精确地等价于它所表示的字符。?
Unicode转义字符被设计为用于在程序员需要插入一个不能用源文件字符集表示的字符的情况。它们主要用于将非ASCII字符置于标识符、字符串字面常量、字符字面常量以及注释中。偶尔地,Unicode转义字符也被用来在看起来颇为相似的数个字符中明确地标识其中的某一个,从而增加程序的清晰度。
?
hello world
?
?
String str = new String(bytes, "ISO-8859-1");?
?
这个构造器声明会抛出UnsupportedEncodingException异常,因此你必须捕获它,或者更适宜的方式是声明main方法将抛出它,要不然程序不能通过编译。尽管如此,该程序实际上不会抛出异常。Charset的规范要求Java平台的每一种实现都要支持某些种类的字符集,ISO-8859-1就位列其中。?
这个谜题的教训是:每当你要将一个byte序列转换成一个String时,你都在使用某一个字符集,不管你是否显式地指定了它。如果你想让你的程序的行为是可预知的,那么就请你在每次使用字符集时都明确地指定。对API的设计者来说,提供这么一个依赖于缺省字符集的String(byte[])构造器可能并非是一个好主意。?
http://justjavac.iteye.com/blog/175266