我有一个要转换为字符的十六进制字符串。这就是我正在使用的功能。
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。
答案 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();
}