好的,所以我一直在抨击这张桌子。
我正在导入由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.
我得到了以下解析错误;
在vim中,它显示了该地方的以下角色; ~@�
我如何从输出中删除它?转义JS代码中的字符导致它编译得很好,但随后奇怪的角色仍然存在。我没有想法。
答案 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字符串中包含换行符。