我只想知道Windows1252是否是UTF-8的子集?有什么不同?
想把我的数据库从Windows1252迁移到UTF-8,有什么想法和意见吗?
发布于 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字符串。
发布于 2019-08-14 03:44:34
在emacs十六进制模式下Ansi与Utf8。所以Cr是43 72,但是还有一个带重音的e --é在ansi中是e9,但在utf8中是c3 a9。那么a就是61。utf8文件在开头也有它的BOM或编码签名ef bf。
43 72 e9 61 Cr.a
ef bb bf 43 72 c3 a9 61 ...Cr..a
发布于 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个元素)就足够了。
不可打印的字符在理论上是相同的,但每个系统都可以改变解释(例如换行符、换行符、或所有转义序列(从^[
开始)。但这与你并不相关。
https://stackoverflow.com/questions/57484214
复制相似问题