3
給定一個輸入字符串,生成一個輸出字符串,其中刪除所有無效序列或用U + FFFD替換。如何在JavaScript中檢測並刪除無效的Unicode序列
是否有比實現狀態機char-by-char或非本地node.JS模塊更好的方法?
無效序列例如是孤兒代替物"\uD800"
或其他無效多字符序列。
給定一個輸入字符串,生成一個輸出字符串,其中刪除所有無效序列或用U + FFFD替換。如何在JavaScript中檢測並刪除無效的Unicode序列
是否有比實現狀態機char-by-char或非本地node.JS模塊更好的方法?
無效序列例如是孤兒代替物"\uD800"
或其他無效多字符序列。
匹配無效序列所需的正則表達式取決於您想包含的內容。要替換U + FFFD孤立的替代品,你可以使用這樣的事情:
var surrogates = /[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
str = str.replace(surrogates , function ($0) {
return $0.length > 1 ? $0 : '\ufffd';
});
如果使用XRegExp圖書館以其Unicode addons,你可以用它代替[\ud800-\udfff]
的\p{Cs}
或\p{Surrogate}
的Unicode類別。使用XRegExp還可讓您輕鬆訪問其他潛在相關的Unicode屬性,如\p{Noncharacter_Code_Point}
,\p{Co}
或\p{Private_Use}
和\p{Cn}
或\p{Unassigned}
。
由於您使用Node.js,您可以使用npm install xregexp
通過npm通過install XRegExp。 XRegExp的npm模塊自動包含Unicode插件。
除了代理之外,你還想要刪除什麼?你想刪除U + FFFF這樣的非字符嗎? (這對於非BMP字符會很惱人。)還是尚未分配的代碼點? – bobince
應用程序可以在內部使用非字符和未分配的代碼點,以免產生不良影響,因此我不想刪除它們。如果除了孤兒代理之外沒有適當的無效序列,那很好。 – OrangeDog