删除不可打印的字符

时间:2015-11-25 16:12:23

标签: javascript utf-8 character-encoding file-encodings

好的,所以我一直在抨击这张桌子。

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

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

我设法将其追踪到这个角色:->
<-(它确实在那里 - 将其复制到某处并使用箭头键移动光标。它卡在中间)。< / p>

由十六进制编辑器查看的此字符显示为0x80 0xE2 0xA9

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

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

我得到了以下解析错误;

enter image description here

在vim中,它显示了该地方的以下角色; ~@�

我如何从输出中删除它?转义JS代码中的字符导致它编译得很好,但随后奇怪的角色仍然存在。我没有想法。

2 个答案:

答案 0 :(得分:3)

您需要使用'\ u2029'作为搜索字符串。您要替换的序列是InDesign插入的“段落分隔符”Unicode字符。

所以:

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

而不是角色本身。

答案 1 :(得分:2)

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更多想法。

search for 0x80 0xE2 0xA9 as UTF-8显示该字符不存在,但可能是a mistype for 0xE2 0x80 0xA9,对应于'PARAGRAPH SEPARATOR' (U+2029),正如Goran在答案中指出的那样。只要所有工具集都已正确配置为使用UTF-8,您通常不需要将奇异字符编码为JavaScript \ u ####引用,但在这种情况下,JavaScript引擎会将其视为换行符,触发语法错误,因为您不允许在JavaScript字符串中包含换行符。