<!---->a) <!---->编码问题主要是由于字节码与字符码的转换
<!---->(1) <!---->GB2312<o:p></o:p>
多字节字符集,是针对特定区域的特定字符集,GBK是GB2312的补充,包括繁体字符。
<!---->(2) <!---->Unicode<o:p></o:p>
目的是在同一篇文章中同时出现中文,英文,日文,法文等文字.不再使用各自地区的编码方式,采用全球同一的编码方式,这样就不会同一个bytes,在不同的编码方式中冲突的现象,一个bytes与一个字符关联。
所有的字符都在相同的位置并且有相同的名字
Unicode 是一种字符集,它将世界上的所有字符映射成一个唯一的数字(code point),比如字母 a 对应的数字 0x0041。
Unicode的编码标志头FF FE<o:p></o:p>
最显而易见的两种方法是将 Unicode 文本存储为 2 个 或 4 个字节序列的串. 这两种方法的正式名称分别为 UCS-2 和 UCS-4。<o:p></o:p>
问题:
<!---->a. <!---->浪费空间
<!---->b.<!---->有些程序无法整取读取UCS-2的英文字母,因为多了0x 00
所以,UCS-2 不适合作为 Unicode 的外部编码.
解决办法就是UTF—
<!---->(3) <!----> utf-8<o:p></o:p>
在 将 Unicode 表示的字符进行存储时,还需要一定的编码方式,比如 UCS-2,它用两个字节来表示 Unicode 编码的字符。而 UTF-8 是 Unicode 字符集的另外一种编码方式,它是变长度的,最多 6 个字节,小于 127 的字符用一个字节表示,与 ASCII 字符集的结果一样,因而具有非常好的兼容性,ASCII 编码下的英语文本不需要修改就可以当作 UTF-8 编码进行处理,应用非常广泛。
<!----> <!----><o:p></o:p>
以下是Unicode(UCS-2)和UTF-8之间的转换关系表:
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
<!----> <!----><o:p></o:p>
标记头:EF BB BF
如果没有标记头,则通过所有内容两个字节信息判断是否是utf-8。
110××××× 10××××××,如果不是这正采用本地字符集。
<!----> <!----><o:p></o:p>
“你“ 这个字符
GB2312: c4 e3
byte[] gb={(byte) 0xc4,(byte) 0xe3};
String a=new String(gb,"GBK");
unicode: 60 4f
String a="\u4f60";
或
byte[] un={(byte) 0xFF,(byte) 0xFE,(byte) 0x60,(byte) 0x4f};
String a=new String(un,"Unicode");
Utf-8: E4 BD A0
byte[] utf={(byte) 0xE4,(byte) 0xBD,(byte) 0xA0};
String a=new String(utf,"Utf-8");
<!---->b) <!---->本地系统设置<o:p></o:p>
JVM的缺省编码方式由系统的“本地语言环境”设置确定,和操作系统的类型无关。
中英文环境下不同LOCALE,java的encoding 不同
file.encoding=ISO-8859-1
user.language=en
user.region=US
<!----> <!----><o:p></o:p>
file.encoding=GBK
user.language=zh
user.region=CN
file.encoding属性,这个属性确定了JVM的缺省的编码/解码方式:从而影响应用中所有字节流==>字符流的解码方式 ,字符流==>字节流的编码方式。<o:p></o:p>
<!----> <!----><o:p></o:p>
<!---->c) <!---->Java 输入输出过程中 字节流&字符流的转换<o:p></o:p>
<!---->(1) <!---->在Java中,字符都是以Unicode进行存储的.
<!---->(2) <!---->编码(encoding)解码(decoding):
encode: String -> bytes[]
source.getBytes(“charset”):根据新编码把字符串转化成bytes,过程是以source的单个字符,在编码对照表中查找相应的字节信息(或者进行算法运算)。得到的字节信息。如果source本身的编码于charset相同,则不为原字节数组。
<!----> <!----><o:p></o:p>
注意如果这步,不可以窄化,不能由大转小。否则会发生信息丢失,无法挽回。
如source的编码是GB2312
String source=”你好”;
Byte[] bs=Source.getbytes(“iso-8859-1”);
Bs.length = 2;
这是由于在ISO-8859-1中没有发现0x… 0x…(你)的字符(当然不会有,你在GB2312中是双字节,ISO中是单字节对照表),这时就返回?的字节吗。这是就发生信息丢失。
<!----> <!----><o:p></o:p>
decode:Bytes[] -> String
new String(bytes,charset) 把bytes,按照charset进行解码得到字符串。也就是说,把bytes当成当成什么编码进行看待。变为字符数组。注意这个过程不可以大化,不能由下转大
<o:p></o:p>
target=new String(source.getBytes(code1),code2)
一般要保持code1和code2相同,并且code2为要显示的字符集。
或者 new String(source.getBytes(code1),code2);
new String(source.getBytes(code2),code1):
在这个过程中要注意
code1:应该为大类型,不能为小类型.如:iso-8859-1
code2:应该为小类型,不能为大类型.如:utf-8
<!----> <!----><o:p></o:p>
String code1="utf-8"; //可以为GBK,utf-8,unicode
String code2="iso-8859-1"; //可以为iso-8859-1\
String b=new String(bb=a.getBytes(code1),code2);
String c=new String(bc=b.getBytes(code2),code1);
<!---->
所有的应用都是按照字节流=>字符流=>字节流,所以在开发中要对编码解码注意,
不过还是由很多疑问,
1.String有没有方法得到期内存中的二进制编码,
2. String code1="utf-8"; //可以为GBK,utf-8,unicode
String code2="GBK"; //可以为iso-8859-1
if source="你" then 乱码
if source="你们" then 正常
<!----><o:p></o:p>
分享到:
相关推荐
看法 在Xml中: < com .nd.android.sdp.im.common.emotion.library.view.EmotionView android : id = " @+id/vEmotion " android : layout_below = " @id/etInput " android : layout_width = " match_parent ...
编码是发送者将思想转化为可传递的信息,解码则是接收者理解这些信息,而噪音则是影响编码和解码准确性的干扰因素,如物理噪音、心理噪音等。 在社交距离上,不同的距离代表了不同类型的互动关系。例如,社交距离...
此回购协议是一个样式转换器,带有编码器和解码器模块。这里的新颖之处在于,现在,人们可以使注意力转向线性。在下面查看如何使用它。这正在wikitext-2上进行验证。目前,它的性能与其他稀疏注意力机制(例如水平...
2. **系统工作原理**:这部分将解释红外通信的基本原理,如红外信号的编码、解码过程,以及89C51如何通过软件控制这些过程。 3. **89C51红外传输系统设计**:详细描述如何构建和配置89C51单片机,使其能够有效地...
Wireshark 数据包分析实战(第 3 版)中的 "生气的开发者" 章节探讨了在 IT 领域中常见的开发者与系统管理员之间的冲突,这种冲突通常源于对问题责任归属的不同看法。本章节通过一个具体的案例来演示如何使用 ...
- 技巧、态度、知识和文化背景的差异会导致编码和解码过程中的信息扭曲。 3. **沟通步骤** - **编码**:发送者将信息转化为可理解的形式。 - **解码**:接收者解读并理解信息。 - **反馈**:接收者向发送者确认...
它可以整合高清多通道系统的捕获、压缩、显示和控制功能,对于混合型安防DVR解决方案,能同时支持16通道H.264 HP带CIF子码流的D1编码和8通道D1解码,并具有视频混合和图像混合功能,支持多达3个独立显示器。...
在这个过程中,还存在一些可能的障碍,比如来源障碍、编码障碍、传送障碍和解码障碍。例如,如果目标定义不清或者信息与消费者需求不符,就可能导致来源障碍。而如果广告过于复杂或含糊,消费者可能会在解码阶段产生...
编码和解码的过程是信息传递的基础,而噪音(如误解、干扰)可能影响沟通效果。有效的沟通需要清晰地编码信息,通过适当的渠道发送,同时确保接收者能正确解码信息,并给予反馈。在班级管理或其他团队环境中,良好的...
每个人既是信息的编码者,也是解码者,不断地在发出和接收信息的过程中塑造和解读他人的形象。 形象的构成包括以下几个关键因素: 1. 人本身:个人的行为、态度、价值观和能力等都是构成形象的重要元素。 2. 相关的...
发信者将信息编码,通过选定的沟通通道(如正式或非正式,上行、下行或平行,单向或双向,书面或口头等)传递给接信者,接信者再解码信息。沟通渠道的选择对信息的准确传递至关重要。正式沟通通常在组织结构内进行,...
沟通不仅仅是传递信息,而是包含编码、解码、反馈等环节。信息由发送者编码后通过各种渠道(口头、书面、非语言)传达给接收者,接收者再解码并给出反馈。这一过程中的理解与反馈至关重要,因为任何误解都可能导致...
6. Q2Y3Q4R5Y6R和D5F6D7J8F9JL4A5A6M7L8MP3G1P4K5G6KU7M6U1N4M6N这两串字符可能是某种编码或者谜题,可能需要解码技巧。 7. 题目强调实践对认识的检验作用,涉及认识论问题。 8. 句子排序题,测试逻辑顺序和语境理解...
- **编码与解码**:发送者将信息编码,接收者解码,过程中可能存在噪音干扰。 - **反馈**:确保信息准确传达并获得理解。 - **成功沟通的关键**:既要清晰表达自己的观点,也要善于倾听他人的看法。 7. **沟通前...
- **信息编码与解码**:信息的发送者如何编码信息,以及接收者如何解码信息,对沟通的有效性至关重要。双方对同一信息的不同理解可能源于文化背景、个人经历等因素。 - **反馈机制**:有效的沟通需要及时的反馈,以...
沟通是一个双向的过程,包括发送者、编码、信息、渠道、接收者、解码和反馈。在这个过程中,发送者通过适当的方式将信息传递给接收者,接收者解码信息并给出反馈,形成一个完整的沟通循环。同时,沟通可能会受到各种...
沟通过程包括信息源、编码、通道、解码和反馈,确保信息能够准确无误地传递并被理解。 沟通的目的主要有四个方面:一是说明事物,即清晰表达信息;二是表达情感,通过言语和非言语手段流露感受;三是建立关系,通过...
他强调了硬件发展对机器学习和深度学习出现的重要性,并分享了他关于硬件和软件关系的四点看法,即:独特的硬件很难成功;硬件限制影响研究方向;良好的软件工具能够塑造研究;硬件性能至关重要。 此外,他还提出了...
9. **编码与解码**:歌词中的“spades, clubs, diamonds, hearts”可以看作是信息编码的一种隐喻,类似于二进制代码或密码学中的符号系统。在IT领域,理解和创建这样的编码系统是数据传输和信息安全的基础。 10. **...