我希望这是一个简单的问题,而且由于所有树木,我只是看不到森林。
我有一个颤抖的字符串,而不是来自看起来像这样的REST API的字符串: “这是什么?”
\ u引起了问题。
我无法在其上执行string.replaceAll(“ \”,“ \”),因为单斜杠表示它正在查找其后的字符,这不是我所需要的。
我试图做一个string.replaceAll(String.fromCharCode(0x92),“”)删除它-没用。
然后我尝试使用正则表达式将其删除,例如string.replaceAll(“ /(?:\)/”,“”),并保留相同的单斜杠。
所以,问题是如何删除该单个斜杠,以便我可以添加一个双斜杠,或将其替换为一个双斜杠?
欢呼
杰斯
答案 0 :(得分:0)
我发现了问题。我正在寻找十六进制92(0x92),应该是十进制92。
我最终解决了这样的问题...
String removeUnicodeApostrophes(String strInput) {
// First remove the single slash.
String strModified = strInput.replaceAll(String.fromCharCode(92), "");
// Now, we can replace the rest of the unicode with a proper apostrophe.
return strModified.replaceAll("u0027", "\'");
}
答案 1 :(得分:0)
当读取字符串时,我假设发生的事情是将其解释为文字而不是其应有的含义(代码点),即\ 0027的每个字符都是一个单独的字符。实际上,您可以根据访问API的方式来解决此问题-请参见箭convert library。如果您对原始数据使用utf8.decode,则可以避免整个问题。
但是,如果这不是一种选择,那么为您提供一个足够简单的解决方案。
写正则表达式或替换正发生的事情是您没有转义反斜杠,因此它实际上什么也没变。如果使用双斜杠,则可以解决该问题,因为它可以转义转义字符。 "\\"
=> "\"
。
另一种选择是使用诸如r"\"
之类的原始字符串,而忽略转义字符。
将此内容粘贴到https://dartpad.dartlang.org中:
String withapostraphe = "What\u0027s this?";
String withapostraphe1 = withapostraphe.replaceAll('\u0027', '');
String withapostraphe2 = withapostraphe.replaceAll(String.fromCharCode(0x27), '');
print("Original encoded properly: $withapostraphe");
print("Replaced with nothing: $withapostraphe1");
print("Using char code for ': $withapostraphe2");
String unicodeNotDecoded = "What\\u0027s this?";
String unicodeWithApostraphe = unicodeNotDecoded.replaceAll('\\u0027', '\'');
String unicodeNoApostraphe = unicodeNotDecoded.replaceAll('\\u0027', '');
String unicodeRaw = unicodeNotDecoded.replaceAll(r"\u0027", "'");
print("Data as read with escaped unicode: $unicodeNotDecoded");
print("Data replaced with apostraphe: $unicodeWithApostraphe");
print("Data replaced with nothing: $unicodeNoApostraphe");
print("Data replaced using raw string: $unicodeRaw");
要查看结果:
Original encoded properly: What's this?
Replaced with nothing: Whats this?
Using char code for ': Whats this?
Data as read with escaped unicode: What\u0027s this?
Data replaced with apostraphe: What's this?
Data replaced with nothing: Whats this?
Data replaced using raw string: What's this?