問題描述
刪除不可打印的字符 (Removing non‑printable character)
好的,所以我一直在用頭撞桌子。
我正在導入一個由 Indesign 導出的 XML 文件。這會解析它並根據輸入創建一個文件。(我正在用 Node 構建一個 JS 應用程序)
這個文件在我的 PHPStorm IDE 中看起來不錯。但是當我在 gedit 中打開它時,我會在這里和那裡看到一些不需要的換行符。
我已經設法找到了這個字符:‑> <‑
(它確實存在 ‑ 將其複製到某處並使用箭頭鍵將光標移動到它上面。它卡在中間)。
十六進制編輯器查看的這個字符會顯示它成為 0x80 0xE2 0xA9
當我嘗試使用簡單的 javascript 替換替換它時;
數據 = data.replace(' ', ''); //左邊有一個字符。相信我。
我收到以下解析錯誤;
在vim中在那個地方顯示以下字符;~@�
我要如何從我的輸出中刪除它?轉義 JS 代碼中的字符導致它編譯得很好,但是奇怪的字符仍然存在。我沒有想法。
我收到以下解析錯誤;在vim中它在那個地方顯示以下字符;~@�
我要如何從我的輸出中刪除它?轉義 JS 代碼中的字符導致它編譯得很好,但是奇怪的字符仍然存在。我沒有想法。
我收到以下解析錯誤;在vim中它在那個地方顯示以下字符;~@�
我要如何從我的輸出中刪除它?轉義 JS 代碼中的字符導致它編譯得很好,但是奇怪的字符仍然存在。我沒有想法。
在 vim 中,它在該位置顯示以下字符;~@�
我要如何從我的輸出中刪除它?轉義 JS 代碼中的字符導致它編譯得很好,但是奇怪的字符仍然存在。我沒有想法。
在 vim 中,它在該位置顯示以下字符;~@�
我要如何從我的輸出中刪除它?轉義 JS 代碼中的字符導致它編譯得很好,但是奇怪的字符仍然存在。我沒有想法。
參考解法
方法 1:
You need to use '\u2029' as the search string. The sequence you are trying to replace is a "paragraph separator" Unicode character inserted by InDesign.
So:
string.replace('\u2029', '');
instead of the character itself.
方法 2:
String.replace() doesn't work exactly the way you think. The way you use it, it'll only replace the first occurrence:
> "abc abc abc".replace("a", "x");
'xbc abc abc'
You need to add the g
(global) flag and the only standard way is to use regular expression as match:
> "abc abc abc".replace(/a/g, "x");
'xbc xbc xbc'
You can have a look at Fastest method to replace all instances of a character in a string for further ideas.
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) as Goran points out in his answer. You don't normally need to encode exotic characters as JavaScript \u#### reference as long as all your tool‑set is properly configured to use UTF‑8 but, in this case, the JavaScript engine considers it a line feed and triggers a syntax error because you aren't allowed to have line feeds in JavaScript strings.
(by Rob、goran、Álvaro González)