当我解析XML,它包含了异常的十六进制字符。 所以,我试图用空白来代替它。 不过,这并不在所有的工作。
原有的特色:
hex code : (253, 255)
代码:
xmlData = String.replace(String.fromCharCode(253,255)," ");
retrun xmlData;
我想从描述中删除“YY”的字符。 是否有任何人谁与替换十六进制字符空空间的麻烦?
基于问题的答案,我已经修改了代码如下:
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.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/
只是有这个问题包含两个有效UTF-8编码和无效迫使更多的手动转换一个搞砸了SQL转储。 正如上述例子所不能解决的更换和找到更好的比赛我计算过,我把我的两分钱在这里为那些有类似编码问题所困扰。 下面的代码:
- 解析我的SQL转储
- 根据查询拆分
- 发现256范围之外的字符代码
- 输出代码和与上下文字符串,其中出现的代码
- 取代了瑞典AAO使用正则表达式正确的代码
- 输出用于控制的替换字符串
"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
包含.
,即任何匹配,并且需要额外的\\