Language agnostic 如何以不';t支持utf-8
好的,这里还有一个字符编码问题,证明了我对Unicode的无知 我正在从Microsoft ExcelLanguage agnostic 如何以不';t支持utf-8,language-agnostic,unicode,character-encoding,dbf,Language Agnostic,Unicode,Character Encoding,Dbf,好的,这里还有一个字符编码问题,证明了我对Unicode的无知 我正在从Microsoft Excel.xls文件中读取数据,并将其存储在ESRI shapefile.shp中。对于Excel>5.0版本,Excel文件中的文本存储为Unicode。然而,Unicode(特别是,我认为我根本不应该使用它。然而,Shapefile确实支持老式的代码页 在必须将Unicode字符串转换为未知但特定代码页中的字符串的情况下,最佳做法是什么 据我所知,Unicode字符串可以包含来自多个“代码页”的字符
.xls
文件中读取数据,并将其存储在ESRI shapefile.shp
中。对于Excel>5.0版本,Excel文件中的文本存储为Unicode。然而,Unicode(特别是,我认为我根本不应该使用它。然而,Shapefile确实支持老式的代码页
在必须将Unicode字符串转换为未知但特定代码页中的字符串的情况下,最佳做法是什么
据我所知,Unicode字符串可以包含来自多个“代码页”的字符。因此,我假设我必须以某种方式估计要使用的“最佳”代码页,然后将所有不受支持的字符转换为该代码页中最接近的字符(或可怕的?
)。这是通常的方法吗
我肯定可以使用的不仅仅是系统代码页。因为.shp
文件使用.dbf
文件来存储其属性数据,至少应该支持.dbf
格式指定的所有代码页(请参阅)。支持的代码页包括:DOS USA
,DOS多语言,Windows ANSI,
Standard Macintosh
,EE MS-DOS
,北欧MS-DOS
,俄语MS-DOS
,冰岛MS-DOS
,Kamenicky(捷克)MS-DOS
,Mazovia(波兰)MS-DOS
,希腊语MS-DOS(437G)
,土耳其语MS-DOS
,俄罗斯麦金塔
,东欧麦金塔
,希腊语麦金塔
,俄罗斯视窗
,土耳其视窗
,希腊语视窗
此外,一些应用程序支持使用指定要使用的额外代码页的*.cpg
文件(尽管我了解对utf-8
的支持,我怀疑许多其他代码页的支持是有限的)
因为我正在尝试开发一个通用工具,所以我不能对.xls
文件中的Unicode内容做任何假设。您的文本使用的是什么语言?如果字符大部分是ASCII,那么最好将原始的UTF-8编码文本写成这样。一个不知道UTF-8的程序仍然可以正确读取ASCII文本为未知字符显示和显示乱码ASCII
一个企业的最佳实践是什么
您必须转换
将Unicode字符串转换为
未知但特定的代码页
取决于文件格式。如果它支持Unicode“转义序列”,如XML的€;
或JSON的\u20AC
,则使用它们,不会丢失任何信息。如果不支持,则需要另一种方法
因此,我认为我必须
以某种方式估计“最佳”代码页
使用
通常,在非Unicode系统上,您可以将字符转换为默认编码,而不是任意代码页
编辑:因此您可以选择代码页:
01h DOS USA code page 437
6Ah Greek MS-DOS (437G) code page 737
02h DOS Multilingual code page 850
64h EE MS-DOS code page 852
6Bh Turkish MS-DOS code page 857
67h Icelandic MS-DOS code page 861
65h Nordic MS-DOS code page 865
66h Russian MS-DOS code page 866
C8h Windows EE code page 1250
C9h Russian Windows code page 1251
03h Windows ANSI code page 1252
CBh Greek Windows code page 1253
CAh Turkish Windows code page 1254
04h Standard Macintosh code page 10000
98h Greek Macintosh code page 10006
96h Russian Macintosh code page 10007
68h Kamenicky (Czech) MS-DOS
69h Mazovia (Polish) MS-DOS
97h Eastern European Macintosh
要选择代码页,我建议:
检查您的数据是否为纯ASCII。如果是,则选择哪个代码页无关紧要
如果没有,请尝试找到一个能准确表示您的数据的代码页(如果不能,则尽量减少不可表示的字符)。请先尝试代码页1252,然后再尝试其他125x代码页。除非您有方框图字符,否则不要使用DOS代码页
然后转换所有不受支持的
将字符转换为最接近的字符
该代码页中的近似值(或
害怕吗?)。这是平常的吗
接近
这是我们在工作中需要将UTF-8文件转换为windows-1252或EBCDIC时采用的方法。我使用Unidecode帮助生成“最接近的近似值”
但是,我们只替换字母和数字,而不是标点符号。将“”替换为“”会破坏一些文件格式。许多应用程序只能正确显示使用系统代码页编码的文件。如果目标应用程序是这样,则您在估计“最佳”时没有太多灵活性代码页,而是由目标操作环境决定。更新的问题更具体。我不知道它将在什么语言中,提前。我已经更新了问题以反映这一点。