删除不可打印的字符

Removing non-printable character

好吧,所以我一直在抨击 table 这个问题。

我正在导入一个由 Indesign 导出的 XML 文件。这会解析它并根据输入创建一个文件。 (我正在使用 Node 构建 JS 应用程序)

这个文件在我的 PHPStorm 中看起来不错 IDE。但是当我在 gedit 中打开它时,我到处看到一些不需要的换行符。

我设法找到了这个字符:->
<-(它确实存在 - 将它复制到某处并使用箭头键将光标移到它上面。它卡在中间)。

这个字符被十六进制编辑器显示为 0x80 0xE2 0xA9

当我尝试使用简单的 javascript 替换来替换它时;

data = data.replace('
', ''); //There IS a character in the left one. Trust me.

我收到以下解析错误;

在vim处显示以下字符; ~@�

如何从我的输出中删除它?转义 JS 代码中的字符使其编译正常,但奇怪的字符仍然存在。我没主意了。

您需要使用“\u2029”作为搜索字符串。您尝试替换的序列是 InDesign 插入的 "paragraph separator" Unicode 字符。

所以:

string.replace('\u2029', '');

而不是角色本身。

String.replace() 并不完全按照您的想法工作。你使用它的方式,它只会取代第一次出现:

> "abc abc abc".replace("a", "x");
'xbc abc abc'

您需要添加 g(全局)标志,唯一的标准方法是使用正则表达式作为匹配项:

> "abc abc abc".replace(/a/g, "x");
'xbc xbc xbc'

您可以查看 Fastest method to replace all instances of a character in a string for 进一步的想法。


A search for 0x80 0xE2 0xA9 as UTF-8 shows the character doesn't exist but it's probably a mistype for 0xE2 0x80 0xA9 which corresponds to 'PARAGRAPH SEPARATOR' (U+2029) 正如 Goran 在他的回答中指出的那样。只要您的所有工具集都正确配置为使用 UTF-8,您通常不需要将外来字符编码为 JavaScript \u#### 参考,但在这种情况下,JavaScript 引擎将其视为换行符并触发语法错误,因为不允许在 JavaScript 字符串中使用换行符。