我怎么能转换ASCII扩展到以System.String?
-
21-08-2019 - |
题
例如:“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字符,如œ ¢ ½ ¾
这里工作是将其转换成自己的二进制和十进制的方法等效