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.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代码和无效的强制进行更多的手动转换。由于上述示例没有解决替换和寻找更好的匹配项,因此我认为我在这里为那些正在与类似编码问题作斗争的人投入了两分钱。以下代码:
- 解析我的 SQL 转储
- 根据查询进行拆分
- 查找 256 范围之外的字符代码
- 输出代码和字符串以及代码出现的上下文
- 使用正则表达式将瑞典语 ÅÄÖ 替换为正确的代码
- 输出替换的字符串以进行控制
"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);
相关文章:
- 请求返回 unicode 替换字符
- 如何在字符串中递归替换字符
- 如何转义 JavaScript 正则表达式替换字符
- string.replace(fromCharCode() , '') 不能替换字符
- 使用正则表达式正面/负面前瞻替换字符
- 如何在 Javascript 中映射替换字符,类似于 Perl 中的“tr”函数
- JavaScript 替换 字符
- 替换字符(将 python 代码转换为 JavaScript)
- JavaScript正则表达式来替换字符序列
- Regex用HTML标记替换字符
- 用换行符替换字符
- 替换字符而不替换''在字符串中
- 创建javascript正则表达式以使用白名单替换字符
- 替换字符和单词
- 仅在子字符串中优雅而健壮地替换字符
- 将数组拆分为子数组并替换字符
- 使用 JavaScript 替换和子字符串替换字符
- 使用javascript regex替换字符实体
- 在javascript中使用regex替换字符的奇怪出现
- 我不能用正则表达式和变量替换字符