如何在Dart中替换unicode转义字符
我需要清理一个包含转义字符的字符串,但无法执行此操作 以下是我的测试代码: 测试“替换unicode转义字符”{ 字符串originalText='Jeremiah 52:1\\u201334'; 字符串replacedText=originalText.replaceAllr'\\',r'\'; 预期替换文字“耶利米书52:1\u201334”; }; 它失败并出现错误:如何在Dart中替换unicode转义字符,dart,unicode,Dart,Unicode,我需要清理一个包含转义字符的字符串,但无法执行此操作 以下是我的测试代码: 测试“替换unicode转义字符”{ 字符串originalText='Jeremiah 52:1\\u201334'; 字符串replacedText=originalText.replaceAllr'\\',r'\'; 预期替换文字“耶利米书52:1\u201334”; }; 它失败并出现错误: Expected: 'Jeremiah 52:1–34' Actual: 'Jeremiah 52:1\\u201
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
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');
这里发生的事情是:第一个存储了以下字符:“\”、“u”、“2”、“0”、“1”和“3”-,而后者只存储了“–”
因此,试图通过将两个斜杠\\替换为一个斜杠\来更改第一个斜杠将不起作用,因为编译器不再转换unicode转义字符
但这并不意味着您将无法将unicode代码转换为unicode字符。您可以使用以下代码:
print('\\u2013'.length); // Prints: 6
print('\u2013'.length); // Prints: 1
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');
Unicode字符和转义字符的存储方式与您在编写字符串时编写它们的方式不同,它们被转换为自己的值。运行以下代码时,这一点很明显:
print('\\u2013'.length); // Prints: 6
print('\u2013'.length); // Prints: 1
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');
这里发生的事情是:第一个存储了以下字符:“\”、“u”、“2”、“0”、“1”和“3”-,而后者只存储了“–”
因此,试图通过将两个斜杠\\替换为一个斜杠\来更改第一个斜杠将不起作用,因为编译器不再转换unicode转义字符
但这并不意味着您将无法将unicode代码转换为unicode字符。您可以使用以下代码:
print('\\u2013'.length); // Prints: 6
print('\u2013'.length); // Prints: 1
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');
为什么要将字符串originalText='Jeremiah 52:1\\u201334';中的反斜杠加倍;?使用正确的字符串originalText='Jeremiah 52:1\u201334';。不幸的是,这就是我从API中得到的。为什么要在字符串originalText='Jeremiah 52:1\\u201334';中加倍反斜杠;?使用正确的字符串originalText='Jeremiah 52:1\u201334';。不幸的是,这就是我从API中得到的。