如果我将byte b
编码为ISO Latin 1(ISO 8859-1),那就足够了
char output = (char)b;
这似乎有效,但我不知道是否还有其他办法。
答案 0 :(得分:3)
直接投射似乎适用于此特定编码。但是,最佳做法是使用Encoding.GetChars方法进行正确转换。
private static readonly Encoding Iso88591 = Encoding.GetEncoding("ISO8859-1");
public static void Main() {
var bytes = new Byte[] { 65 };
var chars = Iso88591.GetChars(bytes);
}
答案 1 :(得分:2)
是的,这应该可以正常工作。如果查看unicode chart for 8859-1,则在8859-1和unicode之间存在一对一的映射。这意味着您可以将其转换为char。
然而,所有代码页都不是这种情况,因此更强大的解决方案可能是一个好主意。
答案 2 :(得分:1)
您可以使用Encoding
类 - 特别是内置的Encoding.ASCII
来从字节数组中获取字符。
特别是GetChars
重载之一。
答案 3 :(得分:0)
我会使用BitConverter
's ToChar
。请记住,对于一个,默认情况下,.NET中的char
是一个2字节的值 - 这样的简单转换(即使它可以工作,它可能)也不是最好的主意。
答案 4 :(得分:0)
如果字节的值是< 128,你很好。如果它是> = 128,那么只是施放可能不会给你正确的角色。
ISO代码页基本上都是ASCII,关键区别在于替换代码页值的上半部分(基本ASCII页面上的IIRC主要是控制台应用程序中有用的艺术字符),其中的字符对于语言有用。代码页。
但是,快速查看Unicode代码页说,Latin-1补充占用了80-FF值(128-255)。所以在这个特定的实例中,你可能没问题,但是如果有一些东西,例如西里尔ISO代码页,你就必须明确地转换为Unicode字符。
答案 5 :(得分:0)
您可以使用Encoding.Convert
。
byte[] latin1 = new byte[]{}; // Your data goes here, obviously
byte[] converted = Encoding.Convert(Encoding.GetEncoding("latin1"), Encoding.ASCII, latin1);
然后,您可以使用新的字节数组,而无需担心Latin 1是否会导致问题。