<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/</link>
<title><![CDATA[mysql乱码的成因和解决方法]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Wed, 01 Sep 2010 14:59:19 +0000</pubDate> 
<guid>http://www.snooda.com/read/</guid> 
<description>
<![CDATA[ 
	    假如一段gbk编码的文字在插入数据库的时候set names latin1了，那么要在utf8格式网页上显示，应该怎么弄？<br />
<br />
    在这里数据库的编码是不重要的，只需set names latin1，然后读出来再用iconv从gbk转到utf8即可。<br />
<br />
    在期间其实数据库里存储的是“乱码”，只不过显示的时候编码正确而已。<br />
<br />
    假如gbk文字以utf8方式插进去了呢？那就需要以utf8方式读出来，再从gbk转到utf8。假如页面是big5，那就从gbk转到big5。<br />
<br />
    假如gbk文字以gbk方式插进去了呢？那就utf8方式读出来，直接显示。假如页面是big5，那就big5方式读出来，直接显示。这个期间所有的地方都不是乱码。<br />
<br />
    现在难度提升。<br />
<br />
    插入的时候不变。读出的时候set names big5。显示的时候想显示成utf8，怎么办？<br />
<br />
    答案是从big5转到latin1，再从gbk转到utf8显示。<br />
<br />
注：从**转到**指的是把字符串当成**编码，将其转成**编码。<br />
<br />
    这个不好理解了吧，解释一下。<br />
<br />
    当插入的时候，我们其实在欺骗服务器，我们告诉服务器我们这个是latin1字符串，于是服务器就按latin1的方式理解了我们的字符串。理解后，将其转换成同含义的数据库字符集的串存起来。当我们取的时候，我们说：“请把数据库里的数据发一个big5编码的版本给我。”服务器就把自己存的那个含义转换成big5版本给我们。<br />
<br />
     这个时候，我们从big5转换成latin1，句子的含义不变。也就是说这个串就是我们当初给服务器的那个串。现在把这个串当成gbk来理解才会有正确的意思。所以我们把它当成gbk，转换成utf8，期间含义不变，我们得到了正确的字符串。<br />
<br />
<br />
    上面的讲解可能比较抽象，下面以小故事的形式来讲一下：小明会说法语，小丽会各种语言，小兰会说英语，浏览器只会说葡萄牙语。<br />
<br />
    小明用法语写了“我爱吃饭”，然后给了小丽，小丽以为是个荷兰语写的条子，于是按荷兰语的方式理解，她以为条子上写的是“天气不错”，于是在自己的本子上用意大利语写了“天气不错”。小兰很八卦，她跑过来问小丽：刚才小明写什么了？小丽用英语给她一个条子：“天气不错”。现在我们要想让浏览器正确理解小明说的什么，怎么办？<br />
<br />
    小兰现在知道小明说的那句话用荷兰语来理解的话是“天气不错”的意思。她又知道小明其实说的是法语。于是她认为第一步要先把小明写的那个条子还原。于是，她通过查字典，用荷兰语写了个条子。现在这个条子上写的东西和当初小明写的是一模一样的了。然后，她找了语言老师，请老师把这个法语条子改写成葡萄牙语的版本，并让老师转交给浏览器。浏览器拿到条子一看，写的是“我爱吃饭”。<br />
<br />
    在这里面，小明是写入时的客户端，小丽是数据库，小兰是读出时的客户端。浏览器是浏览器。<br />
<br />
    虽然浏览器正确的理解了小明说的话，但小丽和小兰并不知道小明到底说了什么。<br />

]]>
</description>
</item><item>
<link>http://www.snooda.com/read/#blogcomment</link>
<title><![CDATA[[评论] mysql乱码的成因和解决方法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.snooda.com/read/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>