如何:将字符串中的Unicode字符表示转换为实际的Unicode字符

4

我在Xamarin应用程序中使用Font Awesome。 XamarinApp正在通信的API返回一个fxxx字符串,以指示要显示哪个图标。 在代码中,我添加 \u 但它被视为字符串而不是Unicode字符。

我在Xamarin应用程序中使用Font Awesome。当XamarinApp与API通信时,API返回一个fxxx字符串,表示要显示哪个图标。我在代码中添加了\u,但它被视为字符串而不是Unicode字符。

    var value = "f641";
    newLabel.Text = char.Parse($"\\u{value}").ToString();

我尝试了char.Parse,但它抛出了一个错误:

System.FormatException:字符串的长度必须恰好为一个字符。

有什么建议吗?


1
在这种情况下,您可以将实际字符存储为字符串,而不是其十六进制值。例如,为什么要将2665存储为字符串,而不是直接输入?或者只需在某个地方存储整数值?如果您无法这样做(为什么?),则可以解析十六进制值,然后使用Char.ConvertFromUtf32将其转换为字符。 - Panagiotis Kanavos
@CodeCaster 意味着 API 返回一个十六进制值,它可以被视为数字。我怀疑 Json.NET 可以使用自定义转换器将十六进制值视为整数。 - Panagiotis Kanavos
1
@Pana 很好的观点。或者简单地添加一个getter来为您完成这个操作。 - CodeCaster
@BrilBroeder API 返回 JSON、XML 还是其他格式?您使用哪个库来反序列化响应?也许您可以为该特定属性添加自定义类型转换器,将十六进制直接转换为字符。 - Panagiotis Kanavos
显示剩余5条评论
1个回答

6

您希望有一个Char来持有私用代码点U+F641的值。

您可以将其解析为它表示的十六进制值来实现:

var input = "f641";
int p = int.Parse(input, System.Globalization.NumberStyles.HexNumber); // 63041

然后将其转换为一个Char

char c = (char)p;

根据可能的代码点范围,您可能没有足够的空间来存储代码点,因此如@Panagiotis所示,使用Char.ConvertFromUtf32(int)

string chars = Char.ConvertFromUtf32(p);

但这样你会得到一个字符串,而不是单个字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接