`
max
  • 浏览: 2474 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于编码,解码我的看法

    博客分类:
  • java
阅读更多

<!---->a)         <!---->编码问题主要是由于字节码与字符码的转换

<!---->(1)    <!---->GB2312<o:p></o:p>

多字节字符集,是针对特定区域的特定字符集,GBKGB2312的补充,包括繁体字符。

<!---->(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)

                     一般要保持code1code2相同,并且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>

分享到:
评论

相关推荐

    EmotionView:Android Emotion Module。解码,编码,查看以供选择

    看法 在Xml中: &lt; com .nd.android.sdp.im.common.emotion.library.view.EmotionView android : id = " @+id/vEmotion " android : layout_below = " @id/etInput " android : layout_width = " match_parent ...

    南京大学网络人际沟通礼仪第一次作业(高升专).pdf

    编码是发送者将思想转化为可传递的信息,解码则是接收者理解这些信息,而噪音则是影响编码和解码准确性的干扰因素,如物理噪音、心理噪音等。 在社交距离上,不同的距离代表了不同类型的互动关系。例如,社交距离...

    linformer-pytorch:我对Pytorch的Linformer的实际实现的看法

    此回购协议是一个样式转换器,带有编码器和解码器模块。这里的新颖之处在于,现在,人们可以使注意力转向线性。在下面查看如何使用它。这正在wikitext-2上进行验证。目前,它的性能与其他稀疏注意力机制(例如水平...

    基于C红外传输专业系统设计.doc

    2. **系统工作原理**:这部分将解释红外通信的基本原理,如红外信号的编码、解码过程,以及89C51如何通过软件控制这些过程。 3. **89C51红外传输系统设计**:详细描述如何构建和配置89C51单片机,使其能够有效地...

    10.6 生气的开发者 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    Wireshark 数据包分析实战(第 3 版)中的 "生气的开发者" 章节探讨了在 IT 领域中常见的开发者与系统管理员之间的冲突,这种冲突通常源于对问题责任归属的不同看法。本章节通过一个具体的案例来演示如何使用 ...

    高效沟通技巧培训职业素养沟通技巧企业内训课程.pptx

    - 技巧、态度、知识和文化背景的差异会导致编码和解码过程中的信息扭曲。 3. **沟通步骤** - **编码**:发送者将信息转化为可理解的形式。 - **解码**:接收者解读并理解信息。 - **反馈**:接收者向发送者确认...

    安防会上TI再秀视频处理器霸主地位.pdf

    它可以整合高清多通道系统的捕获、压缩、显示和控制功能,对于混合型安防DVR解决方案,能同时支持16通道H.264 HP带CIF子码流的D1编码和8通道D1解码,并具有视频混合和图像混合功能,支持多达3个独立显示器。...

    《消费者行为学——个体经验过程(第九章 营销传播)》.ppt

    在这个过程中,还存在一些可能的障碍,比如来源障碍、编码障碍、传送障碍和解码障碍。例如,如果目标定义不清或者信息与消费者需求不符,就可能导致来源障碍。而如果广告过于复杂或含糊,消费者可能会在解码阶段产生...

    团队精神和人际沟通PPT.pptx

    编码和解码的过程是信息传递的基础,而噪音(如误解、干扰)可能影响沟通效果。有效的沟通需要清晰地编码信息,通过适当的渠道发送,同时确保接收者能正确解码信息,并给予反馈。在班级管理或其他团队环境中,良好的...

    个人形象管理之道.doc

    每个人既是信息的编码者,也是解码者,不断地在发出和接收信息的过程中塑造和解读他人的形象。 形象的构成包括以下几个关键因素: 1. 人本身:个人的行为、态度、价值观和能力等都是构成形象的重要元素。 2. 相关的...

    项目沟通管理(PPT41页).pptx

    发信者将信息编码,通过选定的沟通通道(如正式或非正式,上行、下行或平行,单向或双向,书面或口头等)传递给接信者,接信者再解码信息。沟通渠道的选择对信息的准确传递至关重要。正式沟通通常在组织结构内进行,...

    如何做到有效沟通.pptx

    沟通不仅仅是传递信息,而是包含编码、解码、反馈等环节。信息由发送者编码后通过各种渠道(口头、书面、非语言)传达给接收者,接收者再解码并给出反馈。这一过程中的理解与反馈至关重要,因为任何误解都可能导致...

    常山2016年事业编招聘考试真题及答案解析整理版.docx

    6. Q2Y3Q4R5Y6R和D5F6D7J8F9JL4A5A6M7L8MP3G1P4K5G6KU7M6U1N4M6N这两串字符可能是某种编码或者谜题,可能需要解码技巧。 7. 题目强调实践对认识的检验作用,涉及认识论问题。 8. 句子排序题,测试逻辑顺序和语境理解...

    酒店服务质量管理宾客沟通与投诉处理.pptx

    - **编码与解码**:发送者将信息编码,接收者解码,过程中可能存在噪音干扰。 - **反馈**:确保信息准确传达并获得理解。 - **成功沟通的关键**:既要清晰表达自己的观点,也要善于倾听他人的看法。 7. **沟通前...

    the World Culture

    - **信息编码与解码**:信息的发送者如何编码信息,以及接收者如何解码信息,对沟通的有效性至关重要。双方对同一信息的不同理解可能源于文化背景、个人经历等因素。 - **反馈机制**:有效的沟通需要及时的反馈,以...

    如何做好沟通与协调.doc

    沟通是一个双向的过程,包括发送者、编码、信息、渠道、接收者、解码和反馈。在这个过程中,发送者通过适当的方式将信息传递给接收者,接收者解码信息并给出反馈,形成一个完整的沟通循环。同时,沟通可能会受到各种...

    aly_有效沟通协调与冲突管理.ppt

    沟通过程包括信息源、编码、通道、解码和反馈,确保信息能够准确无误地传递并被理解。 沟通的目的主要有四个方面:一是说明事物,即清晰表达信息;二是表达情感,通过言语和非言语手段流露感受;三是建立关系,通过...

    CO HW3.pdf

    他强调了硬件发展对机器学习和深度学习出现的重要性,并分享了他关于硬件和软件关系的四点看法,即:独特的硬件很难成功;硬件限制影响研究方向;良好的软件工具能够塑造研究;硬件性能至关重要。 此外,他还提出了...

    Shapeofmyheart这个杀手不太冷.pptx

    9. **编码与解码**:歌词中的“spades, clubs, diamonds, hearts”可以看作是信息编码的一种隐喻,类似于二进制代码或密码学中的符号系统。在IT领域,理解和创建这样的编码系统是数据传输和信息安全的基础。 10. **...

Global site tag (gtag.js) - Google Analytics