我需要清理具有转义字符的字符串,但无法这样做。
这是我的测试代码:
test('Replace unicode escape character', () {
String originalText = 'Jeremiah 52:1\\u201334';
String replacedText = originalText.replaceAll(r'\\', r'\');
expect(replacedText, 'Jeremiah 52:1\u201334');
});
它失败并出现错误:
Expected: 'Jeremiah 52:1–34'
Actual: 'Jeremiah 52:1\\u201334'
Which: is different.
Expected: ... miah 52:1–34
Actual: ... miah 52:1\\u201334
Unicode 字符和转义字符不会按照您在编写字符串时编写的方式存储 - 它们会转换为自己的值。当您运行以下代码时,这一点很明显:
print('\\u2013'.length); // Prints: 6
print('\u2013'.length); // Prints: 1
在这里,发生的情况是:第一个存储了以下字符:“\”、“u”、“2”、“0”、“1”和“3”——而后者仅存储“–”。
因此,您尝试通过替换两个斜杠来更改第一个\\
带有一个斜杠\
不起作用,因为编译器不再转换你的 unicode 转义字符。
但这并不意味着您无法将 unicode 代码转换为 unicode 字符。您可以使用以下代码:
final String str = 'Jeremiah 52:1\\u2013340';
final Pattern unicodePattern = new RegExp(r'\\u([0-9A-Fa-f]{4})');
final String newStr = str.replaceAllMapped(unicodePattern, (Match unicodeMatch) {
final int hexCode = int.parse(unicodeMatch.group(1), radix: 16);
final unicode = String.fromCharCode(hexCode);
return unicode;
});
print('Old string: $str');
print('New string: $newStr');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)