c# - 如何将转义的 unicode 转换为常规格式的 unicode
问题描述
我有这段代码可以帮助解析emoji的unicode:
public string DecodeEncodedNonAsciiCharacters(string value)
{
return Regex.Replace(
value,
@"\\u(?<Value>[a-zA-Z0-9]{4})",
m =>
((char)int.Parse(m.Groups["Value"].Value, NumberStyles.HexNumber)).ToString();
);
}
所以我把我的代码这样
DecodeEncodedNonAsciiCharacters("\uD83C\uDFCB\uD83C\uDFFF\u200D\u2642\uFE0F");
给Console.WriteLine();
我这个表情符号♂️所以我的问题是我怎么能把这个
"\uD83C\uDFCB\uD83C\uDFFF\u200D\u2642\uFE0F"
进入这个代码点
U+1F3CB, U+1F3FF, U+200D, U+2642, U+FE0F
上面的代码点来自Emojipedia.org
解决方案
看来,您想将两个代理字符组合成一个Utf-32:
\uD83C\uDFCB => \U0001F3CB
如果是你的情况,你可以这样说:
代码:
public static IEnumerable<int> CombineSurrogates(string value) {
if (null == value)
yield break; // or throw new ArgumentNullException(name(value));
for (int i = 0; i < value.Length; ++i) {
char current = value[i];
char next = i < value.Length - 1 ? value[i + 1] : '\0';
if (char.IsSurrogatePair(current, next)) {
yield return (char.ConvertToUtf32(current, next));
i += 1;
}
else
yield return (int)current;
}
}
public static string DecodeEncodedNonAsciiCharacters(string value) =>
string.Join(" ", CombineSurrogates(value).Select(code => $"U+{code:X4}"));
演示:
string data = "\uD83C\uDFCB\uD83C\uDFFF\u200D\u2642\uFE0F";
// If you want codes, uncomment the line below
//int[] codes = CombineSurrogates().ToArray(data);
string result = DecodeEncodedNonAsciiCharacters(data);
Console.Write(result);
结果:
U+1F3CB U+1F3FF U+200D U+2642 U+FE0F
推荐阅读
- python - 是什么导致 c/perl/python 中的简单程序之间的大量执行时间?
- akka - 从 Akka 类型的 Actor 访问应用程序配置的最佳实践
- python - 使用导入的 pipfile 创建新的 pipenv 项目
- reactjs - 用 Bootstrap 4 反应 Toastify
- python - 尝试解密并打印出我在同一程序中加密的文本文件
- ios - 带有视频的 iOS 推送通知未在锁定屏幕上显示
- react-native - 从 Meteor 服务器检索数据
- html - 如何删除由“layoutit”创建的名称
- java - 命令解释器的问题
- jdbc - 如果 JDBC 响应时间太长,是否有可能在 Jmeter 中导致样本失败?