首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF8对Latin1

UTF8对Latin1
EN

Stack Overflow用户
提问于 2015-12-07 19:35:54
回答 2查看 2.2K关注 0票数 5

我试图理解Latin1和UTF8之间的区别,但是,在测试时,我得到了一些奇怪的结果,需要一些帮助来澄清。

我正在用'é‘测试(拉丁文小写字母E带有急性),下面的链接显示了十六进制c3a9

我建立了一个数据库,并指定utf8作为字符集,然后创建了一个以utf8为字符集的表,并在将连接和客户端字符集设置为UTF8之后插入了一个带有“é”字符的记录。

当我执行select十六进制(字段)时,来自test_table的字段得到:

十六进制(字段),字段C3A9,é

然而,当我使用latin1字符集执行完全相同的操作时,这是很好的,并且与我所读到的内容一致,我得到以下内容:

十六进制(字段),字段C3A9,é

但是,如果我输入char(x'E9') (它应该是é的单字节Latin1等效值),我设法让它使用“set name UTF8”正确显示,但是当将连接和客户端设置为Latin1时,它没有正确显示。

有人能澄清吗?- Latin1字符不应该在UTF8和Latin1中都是单字节(十六进制E9)吗?还是我完全误解了这一切?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 21:21:24

在最近把一个网站通过铃声UTF-8明智,我认为这是一个情况下,查看UTF-8数据在一个latin1表中的UTF-8编码的网页或终端。

如果您使用的是终端,您可以查看终端的字符编码设置(在Ubuntu中,它是终端->集字符编码)。如果您正在使用类似于PHPMyAdmin的内容,请查看页面源代码并查找页面的字符集,或者打开Firebug并查看页面的响应头,它应该是"UTF-8“。

如果您插入了数据,并将其编码为UTF-8,并将其放入latin1表中,那么数据仍将存储在UTF-8中,只有当您开始查看该数据或以不同的编码检索数据时,您才会开始产生损坏的效果。

我发现,在处理字符编码时,必须得到相同的内容:页面必须具有UTF-8的字符集,数据库的上游必须位于UTF-8中,数据库必须具有默认的字符集和UTF-8的存储。一旦你把一个不同的字符混合在一起,一切都会变得疯狂。

票数 2
EN

Stack Overflow用户

发布于 2015-12-10 02:55:28

latin1编码只有1字节码.

前128个代码(7位)在latin1和utf8之间大部分是相同的.

é超出了128;它的1字节,8位latin1十六进制是E9 (正如您所观察到的)。对于utf8,它需要两个字节:C3A9。对于大多数亚洲字符,utf8需要3个字节;latin1不能表示这些字符。

MySQL有一个令人困惑的命令SET NAMES utf8。这表明客户机的编码是utf8,并指示客户端和服务器之间的通信在读取/写入时在列的CHARACTER SET和utf8之间进行转换。

如果您有SET NAMES latin1 (旧的缺省值),但是客户端中的字节是编码的utf8,那么您就是在“撒谎”,并且会发生各种不愉快的事情。但目前还没有迹象表明有什么不对劲。

完全使用utf8的检查清单:

  • 客户端中的字节是utf8 8编码的。
  • SET NAMES utf8 (或连接到MySQL期间的等效参数)
  • 列或表声明上的CHARACTER SET utf8
  • html中的<meta ... UTF-8>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34141710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档