首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows 1252是否是UTF-8的子集?

Windows 1252是否是UTF-8的子集?
EN

Stack Overflow用户
提问于 2019-08-14 03:30:18
回答 3查看 2.6K关注 0票数 2

我只想知道Windows1252是否是UTF-8的子集?有什么不同?

想把我的数据库从Windows1252迁移到UTF-8,有什么想法和意见吗?

EN

回答 3

Stack Overflow用户

发布于 2019-08-14 03:32:49

Windows-1252在“可用字符”方面是UTF-8的子集,但在逐字节表示方面则不是这样。Windows-1252包含字节127到255之间的字符,UTF-8对这些字符采用不同的编码。

ASCII范围(127及以下)中的任何可见字符都以1:1的UTF-8编码。

因此,虽然您可以在两者之间进行转换,但不能保证CP-1252字符串是有效的UTF-8字符串。

票数 5
EN

Stack Overflow用户

发布于 2019-08-14 03:44:34

在emacs十六进制模式下Ansi与Utf8。所以Cr是43 72,但是还有一个带重音的e --é在ansi中是e9,但在utf8中是c3 a9。那么a就是61。utf8文件在开头也有它的BOM或编码签名ef bf。

代码语言:javascript
运行
复制
         43 72    e9 61      Cr.a

ef bb bf 43 72 c3 a9 61  ...Cr..a 
票数 0
EN

Stack Overflow用户

发布于 2019-08-14 19:46:18

是的,Windows 1252字符是Unicode的子集。

Unicode在设计上实现了从1993年可用的大多数(公共)字符编码来回无损转换。CP-1252比Unicode旧,并且经常使用,因此Unicode被设计为包含所有CP-1252。

这种设计是为您的情况指定的:您可以一次转换一个层,而不会丢失信息,因此不需要旗帜日。您只需转换数据库,并将客户端驱动程序设置为转换回CP-1252。(通常这是默认的,客户端知道您期望的编码,并且他们知道将提供哪个数据库,因此它将进行转码)。在第二步中,您可以更改客户端部分(可能稍后更改前端)。

只是你应该关心一些问题: Unicode有各种规范形式,对于同一字符有更多可能的表示。从CP-1252开始,这不是问题,但在后路上,您可能会有问题,这取决于您使用的库。如果您需要转换回来,只需做一些实验。

许多代码在Unicode和CP-1252中是相同的,但是编码UTF-8需要两个(或更多)字节用于大约127的代码,因此这些字节不兼容。但通常一个简单的查找表(256个元素)就足够了。

不可打印的字符在理论上是相同的,但每个系统都可以改变解释(例如换行符、换行符、或所有转义序列(从^[开始)。但这与你并不相关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57484214

复制
相关文章

相似问题

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