【问题标题】:Converting string to Unicode characters将字符串转换为 Unicode 字符
【发布时间】:2017-03-04 17:17:46
【问题描述】:

我正在尝试将字符串转换为一系列 unicode 字符。
例如:如果我有一个包含“Ñ”的字符串,我想要的 unicode 就是这个“U+00D1”。
编辑
谢谢大家的时间。我想要的是 unicode 字符的十六进制表示,而不是用 unicode 编码的字符本身。

【问题讨论】:

  • 你的意思是,你想要每个 unicode 字符的十六进制表示?
  • 没错@maf-soft
  • 如果我理解正确,您是从 .NET 字符串实例开始的。那不是“UTF-8 字符串”。 C# 和 .NET 字符串基于代表 UTF-16 代码单元的 char 值。

标签: c# string unicode utf-8


【解决方案1】:

如果您不询问算法本身,则只需使用Encoding.Convert。

【讨论】:

    【解决方案2】:

    试试这个:

        string input = "nsa";
        var result = input.Select(t => string.Format("U+{0:X4} ", Convert.ToUInt16(t))).ToList();
    

    或者使用更好的格式(C# 6):

        string input = "nsa";
        var result = input.Select(t => $"U+{Convert.ToUInt16(t):X4} ").ToList();
    

    【讨论】:

    • 谢谢。我正在使用 c# 4,看来这段代码需要 c# 6 :(
    • 保留两个版本的字符串格式。未来与插值字符串有关。
    • 为什么不简单地使用(ushort)t 而不是Convert.ToUInt16(t)?
    • 这也是一种选择
    • 请注意,如果字符串包含超过 U+FFFF 的代码点,例如 C# 中的 "abc\U00012345def",那么此方法将获取代理对的十六进制值,而不是字符本身。当然,这可能正是您想要的。如果没有,请使用StringInfo 类遍历所谓的文本元素,并使用“文本元素”上的char.ConvertToUtf32 来获取数值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多