【问题标题】:C# Convert HEX (Korean) To Korean LettersC# 将 HEX(韩文)转换为韩文字母
【发布时间】:2018-10-15 20:33:28
【问题描述】:

我有一个要转换为字符的十六进制字符串。这是我正在使用的功能。

    public string GetAsciiString(bool replaceNewline = true)
    {
        char[] chars = new char[data.Length + 1];
        byte[] bytes = new byte[data.Length + 1];
        bytes[0] = opcode;
        Array.Copy(data, 0, bytes, 1, data.Length);
        for (int i = 0; i < bytes.Length; ++i)
        {
            byte value = bytes[i];
            if ((value == '\n' || value == '\r') && !replaceNewline)
                chars[i] = (char)value;
            else if (value < 32 || value > 126)
                chars[i] = '.';
            else chars[i] = (char)value;
        }
        return new string(chars);
    }

但是,这仅显示英文字符而不是韩文字符。关于如何让它显示韩语的任何想法?

编辑:我发现问题在于我正在转换为 Ascii。

【问题讨论】:

  • ASCII 中不存在韩语字符。
  • 您应该查看Character Encoding in .NET。在将字符串编码为十六进制之前,您需要知道字符串是如何编码的。
  • 编码是 ks_c_5601-1987 那么我如何从十六进制中获取可读字符呢?

标签: c# hex


【解决方案1】:

好的,有多种方法可以解决这个问题。

将字节数组转换为字符串的操作称为解码。在 .NET 中,这是通过 Encoding 类完成的。在您的情况下,您必须首先找到相应的编码。查看上面链接的文档,编码ks_c_5601-1987对应代码页949,所以:

var encoding = Encoding.GetEncoding(949);

一旦你有了那个编码,你就可以用它来解码字节:

var text = encoding.GetString(bytes);

这留下了那些字节的问题。如果您已经有一个字节数组,那么您就可以开始了。如果你有一个十六进制字符串,我建议你查看现有的问题,例如:https://stackoverflow.com/a/311165/

如果您的数据在流中,我建议您使用 StreamReader 代替:

using(var reader = new StreamReader(stream, encoding)) // use encoding to decode from stream
{
    var text = reader.ReadToEnd();
}

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多