我想知道Windows 1252是否是UTF-8的子集,它们有什么区别?
考虑从Windows 1252迁移到UTF-8,你有什么想法或意见吗?
我想知道Windows 1252是否是UTF-8的子集,它们有什么区别?
考虑从Windows 1252迁移到UTF-8,你有什么想法或意见吗?
Windows-1252是UTF-8的子集,它们在“哪些字符可用”方面相同,但在“按字节表示”的方式上不同。Windows-1252包含介于127到255字节之间的字符,而UTF-8有不同的编码。
ASCII范围内的任何可见字符(127及以下)在UTF-8中都被1:1编码。
因此,虽然你可以在两者之间进行转换, 但CP-1252字符串不能保证是有效的UTF-8字符串。
在emacs的hexl-mode中,Ansi与Utf8的区别。所以Cr是43 72,但接下来有一个带重音的e -- é。在ansi中是e9,在utf8中是c3 a9。然后a是61。utf8文件还在开头有它的BOM或编码签名,ef bb bf。
43 72 e9 61 Cr.a
ef bb bf 43 72 c3 a9 61 ...Cr..a
是的,Windows 1252字符集是Unicode的子集。
Unicode的设计实现了与1993年大多数(常见)字符编码之间的无损转换。CP-1252比Unicode旧,并且经常使用,因此Unicode被设计为包括所有CP-1252。
这种设计是针对您的情况指定的:您可以一次转换一层,而不会丢失信息,因此不需要进行标志日。您只需转换数据库,但并设置客户端[驱动程序]以将其转换回CP-1252。 (通常它是默认值,客户端知道您期望的编码,他们知道数据库将提供什么,因此它将执行转码)。在第二步中,您可以更改客户端部分(也许稍后再更改前端)。
只需注意一些问题:Unicode具有各种规范形式,以及同一字符的更多可能表示。从CP-1252开始没有问题,但在返回的路上,您可能会遇到问题,这取决于您使用的库。如果您需要转换回,请进行一些实验。
许多代码在Unicode和CP-1252中相同,但UTF-8编码需要两个(或更多)字节来处理127个代码,因此它们不是逐字节兼容的。但通常一个简单的查找表(256个元素)就足够了。
非打印字符在理论上是相同的,但每个系统可能会改变解释方式(例如换行符、进纸符[新页面或现在常见的新部分]或所有转义序列[以^ [
开头])。但这对你来说并不重要。