簡體   English   中英

string.replace(fromCharCode() , '') 不能替換字符

[英]string.replace(fromCharCode() , '') cannot replace characters

當我解析 XML 時,它包含異常的十六進制字符。 所以我試圖用空白空間替換它。 但它根本不起作用。

原字:�

hex code : (253, 255)

代碼 :

xmlData = String.replace(String.fromCharCode(253,255)," ");

retrun xmlData;

我想從描述中刪除“ýÿ”字符。 是否有人在將十六進制字符替換為空白時遇到問題?

根據答案,我修改了代碼如下:

testData = String.fromCharCode(253,255);
xmlData = xmlData.replace(String.fromCharCode(253,255), " "); 
console.log(xmlData);

但它仍然在屏幕上顯示'''..

你知道為什么還會出現這種情況嗎?

字符代碼實際上是 255 * 256 + 253 = 65533,所以你會得到這樣的結果:

xmlData = xmlData.replace(String.fromCharCode(65533)," ");

String String.fromCharCode(253,255)有兩個字符。

您應該在字符串實例上調用replace()而不是String

var testData = String.fromCharCode(253,255);
var xmlData = testData.replace(String.fromCharCode(253,255), " ");
alert(xmlData);

​工作示例:http: //jsfiddle.net/StURS/2/

剛剛遇到了一個混亂的 SQL 轉儲問題,該轉儲包含有效的 UTF-8 代碼和無效的強制更多手動轉換。 由於上面的例子沒有解決替換和尋找更好的匹配問題,我想我把我的兩分錢放在了這里,用於那些正在努力解決類似編碼問題的人。 以下代碼:

  1. 解析我的 sql 轉儲
  2. 根據查詢拆分
  3. 查找 256 范圍之外的字符代碼
  4. 輸出代碼和帶有代碼出現的上下文的字符串
  5. 使用正則表達式將瑞典語 ÅÄÖ 替換為正確的代碼
  6. 輸出替換的字符串以進行控制
"use strict";

const readline = require("readline");
const fs = require("fs");

var fn = "my_problematic_sql_dump.sql";
var lines = fs.readFileSync(fn).toString().split(/;\n/);

const Aring = new RegExp(String.fromCharCode(65533) +
    "\\" + String.fromCharCode(46) + "{1,3}", 'g');
const Auml = new RegExp(String.fromCharCode(65533) +
    String.fromCharCode(44) + "{1,3}", 'g');
const Ouml = new RegExp(String.fromCharCode(65533) +
    String.fromCharCode(45) + "{1,3}", 'g');

for (let i in lines){
    let l = lines[i];
    for (let ii = 0; ii < l.length; ii++){
        if (l.charCodeAt(ii) > 256){
            console.log("\n Invalid code at line " + i + ":")
            console.log("Code: ", l.charCodeAt(ii), l.charCodeAt(ii + 1),
                l.charCodeAt(ii + 2), l.charCodeAt(ii + 3))

            let core_str = l.substring(ii, ii + 20)
            console.log("String: ", core_str)

            core_str = core_str.replace(/[\r\n]/g, "")
            .replace(Ouml, "Ö")
            .replace(Auml, "Ä")
            .replace(Aring, "Å")
            console.log("After replacements: ", core_str)
        }
    }
}

結果輸出將如下所示:

 Invalid code at line 18:
Code:  65533 45 82 65533
String:  �-R�,,LDRALEDIGT', N
After replacements:  ÖRÄLDRALEDIGT', N

 Invalid code at line 18:
Code:  65533 44 44 76
String:  �,,LDRALEDIGT', NULL
After replacements:  ÄLDRALEDIGT', NULL

 Invalid code at line 19:
Code:  65533 46 46 46
String:  �...ker med fam till
After replacements:  Åker med fam till

我發現一些值得注意的事情:

  • 65533后面有時會跟隨不同數量的常規字符,這些字符決定實際字符,因此{1,3}
  • Aring包含一個. , 即匹配任何東西並且需要額外的\\

如果您需要替換()文本中的所有字符。 (全球)

 let data = 'Hello' + String.fromCharCode(32,32,32) + 'World' + String.fromCharCode(32,32,32) + '!'; let find = String.fromCharCode(32,32,32) // 3x space let regex = new RegExp(find, 'g'); let updatedData = data.replace(regex, ' _TEXT_ '); alert(updatedData);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM