`
hellsing42
  • 浏览: 258173 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于字符集转换的本质问题。

 
阅读更多

UTF-8

UTF-16BE

UTF-16LE

GB2312

GBK

这些眼花缭乱的字符集是在弄的自己十分眼晕。到底为啥经常性出现乱码。今天老大一番讲解终于明白到底咋回事了。

 

这些东西全部是各地组织编制的字符映射表,通过对应不同byte得到不同的字符,比如 0x0041在UTF-8理代表拉丁文的A,但到GB2312中0x0041代表的不一定就是拉丁文的A,而在GB2312里代表拉丁文A的byte字节可能是0xffec了。而在机器的通讯中所有数据都会通过byte形式发出去。所以如果两边对这段byte解释的标准不一样就会出现乱码.(也就是说参照的映射表不一样)

 

举例,小学生布置作业,A个同学没有超下来作业的页码,打电话给另外一个B同学(通讯建立)询问数学作业的内容。B同学告诉A同学作业在数学书(映射表,例如utf-8)页码12页第三题(就像byte),而A同学拿着语文书 (不同的映射表GB2312)找12页第三题根本找不到。就会出现错误。

 

Java中很多数据都可以使用getbyte()方法获得数据的2进制字节形式,所以要注意他的编码格式,也就是所参照的映射表。例如String.getbytes(),此方法获得的byte是按照本地映射表进行理解的,也就是说如果该类的编码格式是utf8他就会按照utf8的映射表吧String内容转换成byte形式(类的编码格式可以在eclispe中更改)。所以如果在另外一端的机器上读取该信息按章不同于原始映射表来理解就会出现错误(例如之前小学生那个例子)。为了避免这种错误最好强制规定好两边的编码形式,使用String.getbytes(String charset)来规定字符集格式例如String.getbytes("UTF-8"),也就是说无论你本地编码是什么他都按照utf-8的映射表来把字符串转换成bytes,在另外一端接收到这个byte后使用new String(bytes,"UTF-8")来得到字符串就不会出现错误。

 

 

分享到:
评论

相关推荐

    Python-内置数据类型.zip

    022.字符串_unicode字符集_三种创建字符串方式_len() 023.字符串_转义字符_字符串拼接_字符串复制_input()获得键盘输入 024.字符串_str()_[]提取字符_replace()替换_内存分析 025.字符串_切片slice操作_逆序 026....

    base58.zip

    结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。 编码流程 (本质为大数与字符串的转化) 输入为bytes,比如:[0x00, 0xFF] 忽略前面的0x00得到数字256 256通过base58编码为字符串”5Q...

    C#本质论(第3版)

    C#本质论(第3版) 详细介绍C# 4.0 第1章 c#概述 1.1 hello world 1.2 c#语法基础 1.2.1 c#关键字 1.2.2 类型定义 1.2.3 main 1.2.4 语句和语句分隔符 1.2.5 空白 1.3 使用变量 1.3.1 数据类型 1.3.2 ...

    IOI国家集训队论文集1999-2019

    许智磊 -《浅谈补集转化思想在统计问题中的应用》 张 宁 -《猜数问题的研究》 张云亮 -《论对算法的选择》 周 源 -《浅析"最小表示法"思想在字符串循环同构问题中的应用》 ## 2004 何 林 -《信息学中守恒法...

    C#5.0本质论第四版(因文件较大传的是百度网盘地址)

    C#5.0本质论第四版,高清扫描的,对C#5.0技术讲的比较详细,第1章 C#概述 1 1.1 Hello,World 1 1.2 C#语法基础 3 1.2.1 C#关键字 3 1.2.2 标识符 4 1.2.3 类型定义 5 1.2.4 Main 6 1.2.5...

    HarfBuzz:开源文本整形引擎-开源

    本质上,这是文本整形的过程:将一串字符代码转换为正确排列的字形序列,这些字形可以呈现在屏幕上或最终输出形式以包含在文档中。 整形取决于许多因素:输入字符串,活动字体,字符串的脚本(或书写系统)以及字符...

    算法引论:一种创造性方法.[美]Udi Manber(带详细书签).pdf

    10.2.1 简单字符串匹配问题 10.2.2 特殊代表集 10.2.3 关于序列比较的归约 10.2.4 在无向图中寻找三角形 10.3 有关线性规划的归约 10.3.1 概述与定义 10.3.2 归约到线性规划的例子 10.4 下界的归约 10.4.1 ...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    选择安装路径,选择数据库版本(企业版),选择字符集(默认值) 填写全局数据库名,管理口令 6. 步骤5/8:先决条件检查 如果你的电脑满足要求但仍然显示检查失败,这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息...

    Windows 程序设计(第5版)(上、下册)--详细书签版

    2.1.4 双字书字符集 2.1.5 unicode解决方案 2.2 宽字符和c 2.2.1 char数据类型 2. 2. 2 宽字符 2.2.3 宽字符库函数 2.2.4 维护单一源代码 2.3 宽字符和windows 2.3.1 windows 头文件类型 ...

    c# 加密和解密相关代码

    Convert 类的ToChar 方法用来将指定的值转换为Unicode 字符,该方法为可重载方法,本实例中用到的它 的重载形式如下: public static char ToChar(int value) 参数说明 value:32 位有符号整数。 返回值:等效于...

    JAVA面试题最全集

    编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串。 9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet...

    ADO.NET本质论.pdf

    讲解了数据结构,演示了如何用ado.net来解决具体的数据访问问题。重点讨论了ado.net如何有效地平衡"功能的泛化"和"执行效率",以及它如何解决对扩展性、并发性和可靠性的要求。针对其他数据访问api(包括ole db,ado...

    ado[1].net中文手册 学习 ado.net的重要资料

    如果原始应用程序使用数据集以 ADO.NET 实现,则该转换很容易进行。请记住,当用两层替换单个层时,将安排这两层交换信息。由于这些层可以通过 XML 格式的数据集传输数据,所以通讯相对较容易。 可编程性 Visual ...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 ...12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    基本信息 作者: 臧萌 出版社:清华大学出版社 ISBN:9787302217831 ...12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...

    宋劲彬的嵌入式C语言一站式编程

    3. 数值字符串转换函数 4. 分配内存的函数 26. 链表、二叉树和哈希表 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树的基本概念 2.2. 排序二叉树 3. 哈希表 27. 本阶段...

    空间数据库的设计.doc

    空间数据库设计的实质是将地理空间实体以一定的组织形式在数据库系统中加以表 达的过程,也就是地理信息系统中空间实体的模型化问题。主要过程是见图2-7-1。 1)概念设计 概念设计是通过对错综复杂的现实世界的认识...

    C和C++头文件对比一览

    经常在CSDN以及其他之类的技术论坛上问关于C++ 头文件的问题。提出这些问题的往往就是那些刚学C++的新手。当初我是菜鸟的时候也问过类似的问题。 现在来看看下面两个include: #include<iostream> // 这个...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    2.3.8 具有特定值集的变量 49 2.4 基本的输入/输出操作 50 2.4.1 从键盘输入 50 2.4.2 到命令行的输出 50 2.4.3 格式化输出 51 2.4.4 转义序列 52 2.5 C++中的计算 54 2.5.1 赋值语句 54 2.5.2 算术运算 55...

Global site tag (gtag.js) - Google Analytics