<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dream☆Wing &#187; 编码</title>
	<atom:link href="http://www.dreamwing.org/tag/%e7%bc%96%e7%a0%81/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dreamwing.org</link>
	<description></description>
	<lastBuildDate>Sat, 05 Nov 2011 17:23:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>字符，字节和编码</title>
		<link>http://www.dreamwing.org/computer/encoding.html</link>
		<comments>http://www.dreamwing.org/computer/encoding.html#comments</comments>
		<pubDate>Mon, 30 Mar 2009 15:18:53 +0000</pubDate>
		<dc:creator>Dream☆Wing</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://www.dreamwing.org/?p=664</guid>
		<description><![CDATA[[转载请保留或注明出处：http://www.regexlab.com/zh/encoding.htm]
级别：中级
摘要：本文介绍了字符与编码的发展过程，相关概念的正确理解。举例说明了一些实际应用中，编码的实现方法。然后，本文讲述了通常对字符与编码的几种误解，由于这些误解而导致乱码产生的原因，以及消除乱码的办法。本文的内容涵盖了“中文问题”，“乱码问题”。
掌握编码问题的关键是正确地理解相关概念，编码所涉及的技术其实是很简单的。因此，阅读本文时需要慢读多想，多思考。
引言
“字符与编码”是一个被经常讨论的话题。即使这样，时常出现的乱码仍然困扰着大家。虽然我们有很多的办法可以用来消除乱码，但我们并不一定理解这些办法的内在原理。而有的乱码产生的原因，实际上由于底层代码本身有问题所导致的。因此，不仅是初学者会对字符编码感到模糊，有的底层开发人员同样对字符编码缺乏准确的理解。















回页首











1. 编码问题的由来，相关概念的理解
1.1 字符与编码的发展
从计算机对多国语言的支持角度看，大致可以分为三个阶段：



　
系统内码
说明
系统


阶段一
ASCII
计算机刚开始只支持英语，其它语言不能够在计算机上存储和显示。
英文 DOS


阶段二
ANSI编码
（本地化）
为使计算机支持更多语言，通常使用 0&#215;80~0xFF 范围的 2 个字节来表示 1 个字符。比如：汉字 &#8216;中&#8217; 在中文操作系统中，使用 [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）。比如，&#8221;Bob123&#8243; 在内存中为：



42
6F
62
31
32
33
00











B
o
b
1
2
3
\0



在使用 ANSI 编码支持多种语言阶段，每个字符使用一个字节或多个字节来表示（MBCS），因此，这种方式存放的字符也被称作多字节字符。比如，&#8221;中文123&#8243; 在中文 Windows 95 内存中为7个字节，每个汉字占2个字节，每个英文和数字字符占1个字节：



D6
D0
CE
C4
31
32
33
00










中
文
1
2
3
\0



在 UNICODE 被采用之后，计算机存放字符串时，改为存放每个字符在 UNICODE 字符集中的序号。目前计算机一般使用 2 个字节（16 位）来存放一个序号（DBCS），因此，这种方式存放的字符也被称作宽字节字符。比如，字符串 &#8220;中文123&#8243; 在 [...]]]></description>
		<wfw:commentRss>http://www.dreamwing.org/computer/encoding.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dips2:GBK-&gt;UTF-8项目转码过程中需要注意的问题</title>
		<link>http://www.dreamwing.org/php/dips_of_transcoding_to_utf-8.html</link>
		<comments>http://www.dreamwing.org/php/dips_of_transcoding_to_utf-8.html#comments</comments>
		<pubDate>Wed, 27 Aug 2008 18:14:53 +0000</pubDate>
		<dc:creator>Dream☆Wing</dc:creator>
				<category><![CDATA[HTML/CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[编码]]></category>
		<category><![CDATA[Dips]]></category>
		<category><![CDATA[UTF-8]]></category>

		<guid isPermaLink="false">http://www.dreamwing.org/?p=124</guid>
		<description><![CDATA[1.UTF-8分BOM和No BOM两种(某记事本++可以转换)
PS: 有BOM会引起COOKIE操作报错
PPS: 据不完全统计，notepad另存为的是有BOM的，Editplus另存为的是No BOM的
2.CSS没转换成UTF-8的话会在IE6显示不了，其他浏览器似乎不受影响
]]></description>
		<wfw:commentRss>http://www.dreamwing.org/php/dips_of_transcoding_to_utf-8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

