Флаттер Unicode Апостроф в струне - PullRequest
0 голосов
/ 20 сентября 2018

Я надеюсь, что это простой вопрос, и что я просто не вижу леса из-за всех деревьев.

У меня есть строка в более трепетной форме, чем в REST API, которая выглядит какthis: «Что это такое?»

Проблема \ u вызывает.

Я не могу сделать string.replaceAll ("\", "\") для него, так как одиночная косая черта означает, что он ищет символ после него, а это не то, что мне нужно.

Я пытался сделать string.replaceAll (String.fromCharCode (0x92), ""), чтобы удалить его - это не сработало.

Затем я попытался использовать регулярное выражение, чтобы удалить его, как string.replaceAll ("/ (?: \) /", "") и остается одна и та же косая черта.

Итак, вопрос в том, как удалить эту одиночную косую черту, чтобы я мог добавить двойную косую черту или заменить ее?с двойной косой чертой?

Ура

Jase

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Когда строка читается, я предполагаю, что происходит то, что она интерпретируется как литерал, а не как она должна быть (кодовые точки), т.е. каждый символ \ 0027 является отдельным символом.На самом деле вы можете исправить это в зависимости от того, как вы получаете доступ к API - см. Dart convert library .Если вы используете utf8.decode для необработанных данных, вы сможете избежать всей этой проблемы.

Однако, если это не вариант, есть достаточно простое решение для вас.

Что происходит, когдавы пишете свое регулярное выражение или заменяете его тем, что вы не избегаете обратной косой черты, так что по сути это становится ничем.Если вы используете двойную косую черту, это решит проблему, поскольку она экранирует escape-символ."\\" => "\".

Другой вариант - использовать необработанную строку, такую ​​как r"\", которая игнорирует escape-символ.

Вставьте это в 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?
0 голосов
/ 20 сентября 2018

Я нашел проблему.Я искал гекс 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", "\'");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...