例如:“1/2”或ASCII DEC 189.当我读从文本字节文件的字节[]包含有效的值,在这种情况下189

转换为Unicode导致Unicode替换字符65533.

  

UnicodeEncoding.Unicode.GetString(B);

转换为ASCII结果在63或 “?”

  

ASCIIEncoding.ASCII.GetString(B);

如果这是不可能什么是处理这种数据的最佳方式是什么?我想能够执行字符串的功能,如更换()。

有帮助吗?

解决方案

字节189代表了ISO-8859-1一个 “1/2”(又名 “拉丁文-1”),所以下面也许是你想要什么:

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

在.NET中的所有字符串和字符是UTF-16编码,所以你需要使用一个编码器/解码器,以别的转换,有时这也被拖欠(如UTF-8的FileStream实例),但良好的做法是始终指定

您将需要某种形式的隐式或(更好)显式元数据与哪个编码的信息提供给您。

其他提示

这取决于编码到底是什么。

有没有这样的事情如“ASCII 189” - ASCII只上升到127有许多的编码,其使用ASCII用于第一128个值的8位编码

您的可以的希望Encoding.Default(这是为特定的系统默认编码),但很难知道。哪里来从你的数据?

在旧PC-8或扩展ASCII字符集约为前IBM和微软引入了代码页的想法PC世界。这是扩展ASCII - 1982年事实上,它是唯一的字符当时设定可在电脑,直到EGA卡允许您在加载其他的字体来VRAM

这也是对ANSI终端默认的标准,和几乎每一个BBS我拨通了在80年代和90年代初使用该字符集用于显示菜单和包装盒。

下面是把8位的扩展ASCII到Unicode文本的代码。注意代码的键位:在GetEncoding(“437”)。即使用代码页437的8位ASCII文本为Unicode等效平移。

    string ASCII8ToString(byte[] ASCIIData)
    {
        var e = Encoding.GetEncoding("437");
        return e.GetString(ASCIIData);
    }

System.String[]不能存储与ASCII > 127字符 如果你想在任何扩展ASCII字符,如œ ¢ ½ ¾ 这里工作是将其转换成自己的二进制和十进制的方法等效

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top