`

编码格式转帖

    博客分类:
  • java
阅读更多

1. 编码问题的由来,相关概念的理解

1.1 字符与编码的发展

从计算机对多国语言的支持角度看,大致可以分为三个阶段:

  系统内码 说明 系统
阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示。 英文 DOS
阶段二 ANSI编码
(本地化)
为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。
中文 DOS,中文 Windows 95/98,日文 Windows 95/98
阶段三 UNICODE
(国际化)
为了使国际间信息交流更加方便,国际组织制定了 UNICODE 字符集,为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求。 Windows NT/2000/XP,Linux,Java

字符串在内存中的存放方法:

在 ASCII 阶段,单字节字符串使用一个字节存放一个字符(SBCS)。比如,"Bob123" 在内存中为:

42 6F 62 31 32 33 00
B o b 1 2 3 \0

在使用 ANSI 编码支持多种语言阶段,每个字符使用一个字节或多个字节来表示(MBCS),因此,这种方式存放的字符也被称作多字节字符。比如,"中文123" 在中文 Windows 95 内存中为7个字节,每个汉字占2个字节,每个英文和数字字符占1个字节:

D6 D0 CE C4 31 32 33 00
1 2 3 \0

在 UNICODE 被采用之后,计算机存放字符串时,改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节(16 位)来存放一个序号(DBCS),因此,这种方式存放的字符也被称作宽字节字符。比如,字符串 "中文123" 在 Windows 2000 下,内存中实际存放的是 5 个序号:

2D 4E 87 65 31 00 32 00 33 00 00 00      ← 在 x86 CPU 中,低字节在前
1 2 3 \0  

一共占 10 个字节。

回页首

1.2 字符,字节,字符串

理解编码的关键,是要把字符的概念和字节的概念理解准确。这两个概念容易混淆,我们在此做一下区分:

  概念描述 举例
字符 人们使用的记号,抽象意义上的一个符号。 '1', '中', 'a', '$', '¥', ……
字节 计算机中存储数据的单元,一个8位的二进制数,是一个很具体的存储空间。 0x01, 0x45, 0xFA, ……
ANSI
字符串
在内存中,如果“字符”是以 ANSI 编码形式存在的,一个字符可能使用一个字节或多个字节来表示,那么我们称这种字符串为 ANSI 字符串或者多字节字符串 "中文123"
(占7字节)
UNICODE
字符串
在内存中,如果“字符”是以在 UNICODE 中的序号存在的,那么我们称这种字符串为 UNICODE 字符串或者宽字节字符串 L"中文123"
(占10字节)

由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。

分享到:
评论

相关推荐

    eclipse乱码+开源转码插件+批量操作

    问题描述:我们项目开发都统一采用utf-8格式编码,但昨天研发部的一个产品要集成进来,他们是用gbk编码的,如果强行将文件设置成utf-8肯定不行,中文全乱了。在jsp里面用 ctrl+H 进行搜索替换也不行,中文也是显示不...

    一键转帖功能插件 for 帝国CMS 6.0 GBK utf8 V1.0.rar

    `copyto.php`负责处理转帖请求,如获取当前文章的信息,生成适合其他平台的分享链接或代码,然后将这些信息以可复制的格式返回给用户,让用户可以轻松地将内容分享到社交媒体或其他网站。 在使用过程中,可能会遇到...

    转帖经典---JAVA设计模式

    1. 责任链模式(Chain of Responsibility):避免将处理逻辑硬编码到对象中,而是让对象组成一条链,请求沿链传递直到被某个对象处理。 2. 命令模式(Command):将请求封装为一个对象,使得可以使用不同的请求、...

    亚信联创面试题(转帖集)

    第二部分让说了c/s的程序流程,编码部分有一个是树的广度优先遍历,当时一看就懵了,已经不看数据接构好多年了,忽然看了树,反而不知道怎么写了。还有一个是以空格分隔的字符串倒序输出,比如:I am a student,...

    【转帖】想跟黑客叫板,就不能不知道这些东西

    暴库是指攻击者利用特定的URL或字符编码技巧,直接访问或下载Web服务器上的数据库文件。一旦成功,攻击者可直接获取数据库中的所有信息,包括用户数据、账号信息等。 ### 数据包监测 数据包监测(Packet Sniffing)...

    ASP学习资料(HTML格式)

    "交流论坛--漫谈Java中的中文问题[转帖].htm"可能讨论了在ASP中处理中文字符集的问题,尤其是在与Java应用交互时可能出现的编码兼容性问题。 "交流论坛--Java Servlet和JSP教程之三.htm"同样可能是对比分析ASP与...

    论坛专用屏蔽干扰码转贴工具

    2. 内容还原:通过算法解析,将识别出的干扰码转化为可读的文字或正常格式的数据。 3. 转贴功能:用户可以方便地复制已解码的内容,并在其他地方(可能是同一论坛的其他帖子,或者是其他论坛)进行粘贴,保持内容的...

    在线流媒体综合运营平台

    用户界面设计了多种播放风格,并具备音量调节、播放进度显示、全屏播放、分类播放列表、推荐、排行榜、专辑管理、标签、收藏、评论、转帖、订阅和留言等社交互动功能。同时,系统还支持视频广告投放,增强了商业化...

    聊天机器人的小例子

    本项目编码UTF-8编译版本4.2.2javaapk提供测试。本源码分析文档http://blog.csdn.net/lmj623565791/article/details/38498353 转载请注明本文地址: http://www.javaapk.com/source/7211.html | JavaApk-安卓应用...

    胖子说RUP(转贴)

    这篇文章是关于Rational Unified Process(RUP)的讨论,由“胖子”(可能是作者的昵称)分享的一个转帖。RUP是一种广泛使用的软件开发过程框架,由IBM的Rational公司开发。它是一种迭代和面向组件的软件开发方法论...

    分享几个新增备案不关站的代码

    5. 编码问题的处理:在处理API返回的数据时,可能会遇到编码不一致的问题,文中提到了使用`iconv`函数进行编码转换(从UTF-8转换为GBK),确保数据的正确显示。 6. 安全和隐私注意事项:使用第三方API接口进行用户...

    简单实用的aixcoder智能编程助手开发插件推荐

    **aixcoder智能编程助手** 是一款专为程序员设计的高效开发插件,它利用先进的深度学习技术,...同时,如果你觉得这款工具对你有所帮助,也请分享给你的同行朋友,并在转帖时注明出处,让我们共同推动软件开发的进步。

    木翼下载系统(MYDOWN) 4.0

    3.修正部分情况一键转帖页面缺少文件的BUG. 4.修正大文件上传个别情况存在的错误. 功能列表: 1.MYDOWN V4默认模板风格更换,全新制作. 2.添加下载中 下载权限设置:后台允许修改: “否 ”“是”的默认值(还有...

Global site tag (gtag.js) - Google Analytics