2012-06-21 139 views
1

当我解析XML时,它包含非正常的十六进制字符。 所以我试图用空的空间替换它。但它根本不起作用。string.replace(fromCharCode(),'')不能替换字符

原有的特色:

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); 

,但它仍然显示“”在屏幕上..

你知道为什么这仍然发生?

回答

2

你应该在一个字符串实例调用replace()String

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

工作例如:http://jsfiddle.net/StURS/2/

+0

感谢您的意见。 但它也无法正确解析异常字符。 这里是我修改后的代码.. testData = String.fromCharCode(253,255); xmlData = xmlData.replace(String.fromCharCode(253,255),“”); console.log(xmlData); 但它仍然显示' '在屏幕上.. 你知道吗?它仍然发生? – user1127017

2

字符代码实际上是255 * 256 + 253 = 65533,所以你会得到的东西像这样:

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

字符串String.fromCharCode(253,255)是两个字符。

+0

[链接](http://jsfiddle.net/y92nc/)。 – Leonid

0

刚刚遇到了包含有效的UTF-8代码和无效强制进行更多手动转换的混乱SQL转储的问题。由于上面的例子没有解决替换和寻找更好的匹配,我想我把我的两分钱放在那里,为那些正在努力解决类似的编码问题。以下代码:

  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包含.,即匹配anyth并需要额外的\\
相关问题