首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将带十六进制的unicode转换为dart / flutter中的字符串

如何将带十六进制的unicode转换为dart / flutter中的字符串
EN

Stack Overflow用户
提问于 2022-05-06 04:21:33
回答 1查看 1.8K关注 0票数 2

%u0BB5%u0BA3%u0B95%u0BCD%u0B95%u0BAE%u0BCD

上面是带有十六进制字符串的unicode,在解码时需要将其转换为可读的文本,上面的文本将返回வணக்கம்表示欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-06 05:09:43

如果需要硬编码字符串(如颤振中的特殊特征Dart语言之旅中所述),可以使用\u指定Unicode代码点:

代码语言:javascript
运行
复制
var welcome = '\u0BB5\u0BA3\u0B95\u0BCD\u0B95\u0BAE\u0BCD';

如果给您一个字符串'%u0BB5%u0BA3%u0B95%u0BCD%u0B95%u0BAE%u0BCD'并需要在运行时动态地转换它,那么您需要:

  1. 将字符串拆分为%uXXXX组件。
  2. XXXX部分解析为十六进制整数,以获得代码点。
  3. 从代码点构造一个String
代码语言:javascript
运行
复制
void main() {
  var s = '%u0BB5%u0BA3%u0B95%u0BCD%u0B95%u0BAE%u0BCD';
  var re = RegExp(r'%u(?<codePoint>[0-9A-Fa-f]{4})');
  var matches = re.allMatches(s);
  var codePoints = [
    for (var match in matches)
      int.parse(match.namedGroup('codePoint')!, radix: 16),
  ];
  var decoded = String.fromCharCodes(codePoints);
  print(decoded); // Prints: வணக்கம்
}

编辑1

一种调整后的版本,它可以使用编码代码点和未编码字符的混合处理字符串:

代码语言:javascript
运行
复制
void main() {
  var s = '%u0BB5%u0BA3%u0B95%u0BCD%u0B95%u0BAE%u0BCD'
      ' hello world! '
      '%u0BB5%u0BA3%u0B95%u0BCD%u0B95%u0BAE%u0BCD';
  var re = RegExp(r'(%u(?<codePoint>[0-9A-Fa-f]{4}))|.');
  var matches = re.allMatches(s);
  var codePoints = <int>[];
  for (var match in matches) {
    var codePoint = match.namedGroup('codePoint');
    if (codePoint != null) {
      codePoints.add(int.parse(codePoint, radix: 16));
    } else {
      codePoints += match.group(0)!.runes.toList();
    }
  }
  var decoded = String.fromCharCodes(codePoints);
  print(decoded); // Prints: வணக்கம் hello world! வணக்கம்
}

编辑2

上面的版本假设您的输入将只包含编码为%uHHHH的Unicode代码点(其中H是一个十六进制数字)和原始的ASCII字符。但是,您的这个问题的新版本表明您实际上需要处理以下几个方面的混合:

  • 编码为%uHHHH的Unicode代码点。
  • 原始(未编码) ASCII字符。
  • ASCII字符编码为%HH

为了处理第三起案件:

代码语言:javascript
运行
复制
void main() {
  var s = '%3Cp%3E%3Cb%3E%u0B87%u0BA8%u0BCD%u0BA4%u0BBF%u0BAF%u0BBE%u0BB5%u0BBF%u0BA9%u0BCD%20%u0BAA%u0BC6%u0BB0%u0BC1%u0BAE%u0BCD%u0BAA%u0BBE%u0BA9%u0BCD%u0BAE%u0BC8%u0BAF%u0BBE%u0BA9%20%u0BAE%u0B95%u0BCD%u0B95%u0BB3%u0BCD%20%u0BAA%u0BB4%u0B99%u0BCD%u0B95%u0BBE%u0BB2%u0BA4%u0BCD%u0BA4%u0BBF%u0BB2%u0BBF%u0BB0%u0BC1%u0BA8%u0BCD%u0BA4%u0BC7%20.........%20%u0BAA%u0BCB%u0BA9%u0BCD%u0BB1%u0BC1%20%u0BA4%u0BBE%u0BA9%u0BBF%u0BAF%u0B99%u0BCD%u0B95%u0BB3%u0BC8%20%u0BAE%u0BC1%u0B95%u0BCD%u0B95%u0BBF%u0BAF%20%u0B89%u0BA3%u0BB5%u0BBE%u0B95%u0BAA%u0BCD%20%u0BAA%u0BAF%u0BA9%u0BCD%u0BAA%u0B9F%u0BC1%u0BA4%u0BCD%u0BA4%u0BBF%u0BA9%u0BB0%u0BCD.%3C/b%3E%0A%3Col%20type%3D%22I%22%20style%3D%22font-weight%3Abold%3B%22%3E%0A%3Cli%3E%3Cspan%20style%3D%22font-weight%3Anormal%3B%22%3E%20%u0B85%u0BB0%u0BBF%u0B9A%u0BBF%3C/span%3E%3C/li%3E%0A%3Cli%3E%3Cspan%20style%3D%22font-weight%3Anormal%3B%22%3E%20%u0B95%u0BC7%u0BB4%u0BCD%u0BB5%u0BB0%u0B95%u0BC1%20%3C/span%3E%3C/li%3E%0A%3Cli%3E%3Cspan%20style%3D%22font-weight%3Anormal%3B%22%3E%20%u0B93%u0B9F%u0BCD%u0BB8%u0BCD%3C/span%3E%3C/li%3E%0A%3Cli%3E%3Cspan%20style%3D%22font-weight%3Anormal%3B%22%3E%20%u0BAA%u0BB0%u0BC1%u0BAA%u0BCD%u0BAA%u0BC1%3C/span%3E%3C/li%3E%3C/ol%3E%3C/p%3E';
  var re = RegExp(
    r'(%(?<asciiValue>[0-9A-Fa-f]{2}))'
    r'|(%u(?<codePoint>[0-9A-Fa-f]{4}))'
    r'|.',
  );
  var matches = re.allMatches(s);
  var codePoints = <int>[];
  for (var match in matches) {
    var codePoint = match.namedGroup('asciiValue') ?? match.namedGroup('codePoint');
    if (codePoint != null) {
      codePoints.add(int.parse(codePoint, radix: 16));
    } else {
      codePoints += match.group(0)!.runes.toList();
    }
  }
  var decoded = String.fromCharCodes(codePoints);
  print(decoded);
}

其中的指纹:

代码语言:javascript
运行
复制
<p><b>இந்தியாவின் பெரும்பான்மையான மக்கள் பழங்காலத்திலிருந்தே ......... போன்று தானியங்களை முக்கிய உணவாகப் பயன்படுத்தினர்.</b>
<ol type="I" style="font-weight:bold;">
<li><span style="font-weight:normal;"> அரிசி</span></li>
<li><span style="font-weight:normal;"> கேழ்வரகு </span></li>
<li><span style="font-weight:normal;"> ஓட்ஸ்</span></li>
<li><span style="font-weight:normal;"> பருப்பு</span></li></ol></p>

有些包可以呈现HTML (例如,package:flutter_html,可能还有其他各种)。否则,我将考虑处理HTML,使其超出了这个答案的范围,无论如何,这都是值得自己提出的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72136135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档