字符串中的Flutter Unicode撇号

时间:2018-09-20 18:21:57

标签: flutter

我希望这是一个简单的问题,而且由于所有树木,我只是看不到森林。

我有一个颤抖的字符串,而不是来自看起来像这样的REST API的字符串: “这是什么?”

\ u引起了问题。

我无法在其上执行string.replaceAll(“ \”,“ \”),因为单斜杠表示它正在查找其后的字符,这不是我所需要的。

我试图做一个string.replaceAll(String.fromCharCode(0x92),“”)删除它-没用。

然后我尝试使用正则表达式将其删除,例如string.replaceAll(“ /(?:\)/”,“”),并保留相同的单斜杠。

所以,问题是如何删除该单个斜杠,以便我可以添加一个双斜杠,或将其替换为一个双斜杠?

欢呼

杰斯

2 个答案:

答案 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?