【发布时间】:2012-08-28 08:56:59
【问题描述】:
我有一个 ANSI 编码的 CSV 文件,其中包含许多“问题”特殊字符。我正在寻找一个脚本(最好是 php 或 javascript),我可以用它来检查 CSV 中的每条记录并识别那些有问题的字符。
循环遍历 CSV 记录没有问题,所以我只是在寻找一种好方法来确定单个字符串是否包含任何字符,如果该字符串直接插入到 UTF-8 编码文件中会导致问题。
背景:我使用脚本将 ANSI CSV 直接转换为 UTF-8 XML,而没有先将 CSV 转换为 UTF-8。我的愚蠢举动。该脚本为包含问题字符的记录创建了 XML 实体,但脚本尝试在其中插入包含问题字符的文本的所有 textNode 最终都为空。我现在正在寻找的是一种解析原始 CSV 文件并识别所有包含问题字符的记录的方法。有大约 18,000 条记录,这不是我想手动完成的工作:-)
澄清 我应该首先将 ANSI CSV 转换为 UTF-8,然后在 UTF-8 编码的 CSV 文件上运行我的“转换为 XML”脚本。相反,我跳过了第一步,在 ANSI 编码的 CSV 文件上运行了我的“转换为 XML”脚本。为所有单元格创建了 XML 实体,但带有诸如 —(em dash)和 ½(一半)字符的单元格的 XML 实体都是空的。 “转换为 XML”脚本无法将这些字符串插入 UTF-8 编码的 XML 文档(在 PHP 中使用 DOMDocument)。
【问题讨论】:
-
什么是“'问题'特殊字符”,因为 utf-8 涵盖了所有的 ansi,从 ansi 转换为 utf-8 会出现任何问题(非常松散地使用“转换”这个词)
-
此文件中实际“问题”字符的示例:-(破折号)、½(二分之一)。最初的问题是因为我试图将 ANSI 编码的文本插入到 UTF-8 编码的 PHP XML DOMDocument 中。 “默默”完成这项工作的脚本未能将包含此类字符的文本插入到 textNodes 中。
-
在这里查看答案:stackoverflow.com/questions/323741/… 看起来我可以简单地使用 PHP 的
ord()来识别包含超出 0-127 范围的字符的字符串。如果这样做了,会报告。 -
@Tex 你确定你的 CSV 是“真正的”ANSI 吗?我只是尝试将(一半)字符插入 Notepad2 中的 ANSI(936)文本文件,但失败了。
-
@Passerby 我将按照 Notepad++ 报告的内容进行操作。它设置为自动检测打开的文本文件的编码,并报告该文件是 ANSI 编码的。我没有比这更深入。
标签: php javascript csv utf-8 ansi