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