ISO拉丁语1字节到字符

时间:2011-01-03 16:29:59

标签: c# string encoding

如果我将byte b编码为ISO Latin 1(ISO 8859-1),那就足够了 char output = (char)b;这似乎有效,但我不知道是否还有其他办法。

6 个答案:

答案 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是否会导致问题。