C#将HEX(韩文)转换为韩文字母

时间:2018-10-15 20:33:29

标签: c# hex

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

    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。

1 个答案:

答案 0 :(得分:0)

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

将字节数组转换为字符串的操作称为解码。在.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();
}