cHa*_*Hao 32
字节不是字符.独自一人,他们甚至不能代表人物.
在计算方面,"字符"是数字代码(或代码序列)与编码或字符集的配对,其定义代码如何映射到真实世界字符(或空白或控制代码).
只有与编码配对后,字节才能表示字符.对于某些编码(如ASCII或ISO-8859-1),一个字节可以表示一个字符......并且许多编码甚至是ASCII兼容的(意味着0到127的字符代码与ASCII的定义对齐).但如果没有原始地图,你就不知道你拥有什么.
没有编码,字节只是8位整数.
您可以通过强制对它们进行编码来以任何方式解释它们.这正是您在转换byte为char,比如new String(myBytes)等时所做的,甚至是在文本编辑器中编辑包含字节的文件.(在这种情况下,它是应用编码的编辑器.)这样做,你甚至可能得到一些有意义的东西.但是,如果不知道原始编码,您无法确切知道这些字节的意图.
它甚至可能不是文本.
例如,考虑字节序列0x48 0x65 0x6c 0x6c 0x6f 0x2e.它可以解释为:
Hello. ASCII和兼容的8位编码;dinner 我用一些8位编码来证明这一点;???在big-endian UTF-16 * ;load r101, [0x6c6c6f2e] 用一些未知的处理器的汇编语言;或者其他一百万件事.仅这六个字节无法告诉您哪种解释是正确的.
至少使用文本,这就是编码的用途.
但是,如果您希望解释正确,则需要使用相同的编码来解码用于生成它们的字节.这就是了解文本编码方式如此重要的原因.
字节流和字符流之间的区别在于字符流尝试使用字符而不是字节.(它实际上适用于UTF-16代码单元.但是因为我们知道编码,这对于大多数用途来说已经足够了.)如果它包裹在字节流中,则字符流使用编码来转换从基础字节流读取的字节到chars(或char写入流到字节的s).
*注意:我不知道"䡥汬漮"是亵渎甚至是否有任何意义......但除非你把它编程为中文,否则它也不是计算机.
字节可以表示一些字符,原因与int可以表示long相同.
Char是16位.字节是8位.此外,char是无符号的,字节是有符号的.
试着这样做:
char c = 'a';
System.out.println(c);
byte b = (byte)c;
c = (char)b;
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)
这将输出:
a
a
Run Code Online (Sandbox Code Playgroud)
现在尝试用nDash替换'a'(unicode 2013).像这样:
char c = '–';
System.out.println(c);
byte b = (byte)c;
c = (char)b;
System.out.println(c);
Run Code Online (Sandbox Code Playgroud)
这将输出:
–
| 归档时间: |
|
| 查看次数: |
5520 次 |
| 最近记录: |