`
hellsing42
  • 浏览: 262041 次
  • 性别: 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")来得到字符串就不会出现错误。

 

 

分享到:
评论

相关推荐

    详细介绍计算机字符集的文档

    ### 计算机字符集详解 #### 一、引言 在计算机科学中,文本的存储和处理是一项基本而重要的任务...理解和掌握字符集和编码的概念对于开发人员来说至关重要,这有助于避免常见的字符处理问题,提高软件的国际化水平。

    java字符串编码转换

    通常情况下,浏览器会根据页面中的 `<meta>` 标签指定的字符集来解释页面内容: ```html ``` 同时,服务器端也需要正确设置响应的编码,以便浏览器能够正确解析返回的数据。 #### 五、总结 本文介绍了Java字符...

    常用字符集编码原理及解决方法

    理解字符集编码的原理和特性对于解决乱码问题、进行文本处理以及跨平台通信至关重要。 首先,ASCII编码是最基础的字符集,它是一种7位的编码,覆盖0x00到0x7F的二进制范围,包含了英文字符、数字和一些标点符号。在...

    oracle查看字符集和修改字符集使用详解

    字符集的实质是按照特定的字符编码方案对符号进行编码。Oracle早期支持的编码方案是US7ASCII,后来发展出更多支持不同语言的编码,如单字节编码的US7ASCII和WE8ISO8859P1,以及多字节编码的GBK、AL32UTF8等。多字节...

    Emoji转换工具,便于各种类型的客户端生成的Emoji字符串转换成另外一种格式

    开发者可能使用了Java的Unicode处理能力,因为Emoji本质上是Unicode字符。 在处理Emoji时,工具可能涉及到以下几个关键知识点: 1. **Unicode编码**:Emoji是由Unicode标准定义的特殊字符,每个Emoji都有一个特定...

    C#中字符串转换为计算公式

    首先,我们需要理解C#中的字符串本质是不可变的字符序列,它们本身不具备执行计算的能力。若要将字符串转化为可计算的表达式,我们需要使用表达式树(Expression Trees)、正则表达式、或者第三方库如NCalc。这里我们...

    中文转换成十六进制编码

    十六进制编码是一种将字符转换为数字表示的方法,尤其在处理非ASCII字符集(如中文)时非常有用。本文将详细介绍如何将中文字符转换成十六进制编码,并通过一个简单的步骤进行演示。 中文字符集主要有GB2312、GBK、...

    java转换字符串编码格式的方法

    字符编码是字符集的表示形式,规定了某个文字对应的二进制数字存放方式(编码)和某串二进制数值代表了哪个文字(解码)的转换关系。在计算机系统中,我们看到的是实体化的文字,但存储在计算机介质中的实质上是二...

    jsp反向工程总结

    - 可以通过编写过滤器来自动处理字符集转换,避免在每个请求处理过程中重复设置字符集。例如,在过滤器中设置`request.setCharacterEncoding("UTF-8")`,这样可以确保所有的请求都使用统一的字符集进行处理。 ####...

    易语言Ansi与Unicode转换源码

    这种编码方式的优点是占用空间小,但缺点是不支持全球所有的字符集,容易导致乱码问题。 相比之下,Unicode是一种包含全世界几乎全部字符的编码标准,包括所有语言的字母、数字和符号。Unicode编码通常有UTF-8、UTF...

    图片转字符 图片转文字工具 图片转字符画工具

    2. 灰度值映射:将每个像素的灰度值映射到字符集,通常字符集由ASCII字符组成,也可以自定义。 3. 字符布局:根据映射结果,将字符按照像素的位置排列,形成字符画。 4. 整体优化:可能需要对整体的字符画进行微调,...

    java中文乱码解决之道(4)java编码转换过程Java

    4. **字符集转换**:在不同编码之间进行转换时,可以使用`java.nio.charset`包下的`CharsetDecoder`和`CharsetEncoder`。例如,从GBK转到UTF-8,可以使用`Charset.forName("GBK").newDecoder()`和`Charset.forName(...

    字符串和base64的编码与解码

    当需要将字符串编码为Base64时,通常先将字符串按照特定字符集转换为字节序列,然后按照Base64规则进行编码。 编码过程大致如下: 1. 将字符串按选定的字符编码(如UTF-8)转换成字节数组。 2. 将字节数组按照每3个...

    字节、字符、编码的相关知识

    字符集定义了一组特定的字符,而编码则规定了如何将这些字符转换为字节序列。不同的字符集如GB2312、GBK、JIS等,不仅规定了包含哪些字符,还规定了如何存储这些字符。Unicode字符集则是国际上广泛接受的标准,几乎...

    易语言文本和字节集相互转换源码-易语言

    它接受一个字符串作为参数,并根据指定的编码(默认为系统当前的字符集)将其转换为字节数据。 2. `取字节集文本`:与`取文本字节集`相反,该函数用于将字节集转换回文本。它需要字节集和编码方式作为输入,然后...

    易语言源码编码转换大全.7z

    这涉及到字符集的理解,比如GBK编码中有些字符在UTF-8中没有对应,反之亦然。 4. **文件读写**:当读取或写入包含多种编码的文件时,需正确设置文件的编码方式,以确保数据的完整性。易语言提供了文件操作的相关...

    javascript汉字简体繁体转换

    1. **Unicode编码**:Unicode是一种国际标准,为全球所有的字符集提供了一个统一的编码方式。每个字符都有一个唯一的Unicode值,简体和繁体汉字在Unicode中的码位不同,这是转换的基础。 2. **字符映射表**:为了...

    宽字符数据结构.pptx

    - Unicode向下兼容,低版本字符集可转换为高版本,确保跨版本稳定性。 - **与其他字符集标准兼容**: - 如ASCII、GB2312等,允许不同编码方案间转换字符。 **2.3 存储效率** - **UTF-8**: - 通常比UTF-16更紧凑...

    YAMAHA ASCII数据转换图文教程

    在电子制造业中,数据转换是至关重要的一个环节,特别是在与硬件设备交互时,如Yamaha贴片机。这个“YAMAHA ASCII数据转换图文教程”就是针对如何将数据转化为Yamaha设备可识别的ASCII格式进行详细讲解的资源。ASCII...

    java 参数转换为matlab参数

    - 转换大型数据集时,考虑性能和内存消耗,可能需要分块处理。 - 释放资源:在完成MATLAB操作后,记得调用`engine.quit()`关闭MATLAB引擎,以释放系统资源。 以上就是Java参数转换为MATLAB参数的详细步骤和一个...

Global site tag (gtag.js) - Google Analytics