我正在从远程服务器导入 .txt 文件并将其保存到数据库中。为此,我使用 .Net 脚本。我有时会注意到文件中出现乱码的单词/字符 ( Ullerهkersvنgen
),这会在保存到数据库时出现问题。
我想在保存到数据库之前过滤所有这些字符并将它们转换为 unicode。
注意:我经历过许多类似的帖子,但没有运气。
您在这方面的帮助将不胜感激。
谢谢。
我正在从远程服务器导入 .txt 文件并将其保存到数据库中。为此,我使用 .Net 脚本。我有时会注意到文件中出现乱码的单词/字符 ( Ullerهkersvنgen
),这会在保存到数据库时出现问题。
我想在保存到数据库之前过滤所有这些字符并将它们转换为 unicode。
注意:我经历过许多类似的帖子,但没有运气。
您在这方面的帮助将不胜感激。
谢谢。
假设您的脚本确实知道文本片段的正确编码,而不是查找所有非 ASCII 字符的正则表达式:
[^\x00-\x7F]+
见这里:https ://stackoverflow.com/a/20890052/1144966和https://stackoverflow.com/a/8845398/1144966
此外,base-R 工具包提供了两个函数来检测非 ASCII 字符:
tools::showNonASCII()
tools::showNonASCIIfile()
您需要知道或至少猜测数据的字符编码,以便能够正确转换它。因此,您应该尝试查找有关文本文件的来源和格式的信息,并确保您在软件中正确读取了该文件。
例如,“Ullerهkersvägen”看起来像一个斯堪的纳维亚名称,其中包含斯堪的纳维亚字母,根据错误的字符编码假设或错误的字符代码转换而被误解。其中第一个阿拉伯字母“ه”是U+0647 阿拉伯文字母 呵呵。在 ISO-8859-6 编码中,它是 E7(十六进制);在 windows-1256 中,它是 E5。由于斯堪的纳维亚文本通常以 ISO-8859-1 或 windows-1252 表示(当不使用 Unicode 编码时),很自然地检查 E7 和 E5 在其中的含义:“ç”和“å”。由于语言原因,后者在这里的可能性更大。第二个阿拉伯字母是“ن” U+0646 ARABIC LETTER NOON,在windows-1256中是E4。在 ISO-8859-1 中,E4 是“ä”。这是完全有道理的:这个词是“Ulleråkersvägen”,一个真正的瑞典街道名称(至少在乌普萨拉)。
因此,数据可能是 ISO-8859-1 或 windows-1252 (Windows Latin 1) 编码文本,被错误地解释为 windows-1256 (Windows Arabic)。无需转换;您只需要以windows-1252 编码的方式读取数据。(阅读后当然可以转换成另一种编码。)