Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 如何以不';t支持utf-8_Language Agnostic_Unicode_Character Encoding_Dbf - Fatal编程技术网

Language agnostic 如何以不';t支持utf-8

Language 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字符串可以包含来自多个“代码页”的字符

好的,这里还有一个字符编码问题,证明了我对Unicode的无知

我正在从Microsoft Excel
.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帮助生成“最接近的近似值”


    但是,我们只替换字母和数字,而不是标点符号。将“”替换为“”会破坏一些文件格式。

    许多应用程序只能正确显示使用系统代码页编码的文件。如果目标应用程序是这样,则您在估计“最佳”时没有太多灵活性代码页,而是由目标操作环境决定。更新的问题更具体。我不知道它将在什么语言中,提前。我已经更新了问题以反映这一点。