当前位置:  开发笔记 > 编程语言 > 正文

如何将扩展的ascii转换为System.String?

如何解决《如何将扩展的ascii转换为System.String?》经验,为你挑选了3个好方法。

例如:"½"或ASCII DEC 189.当我从文本文件中读取字节时,byte []包含有效值,在本例中为189.

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

UnicodeEncoding.Unicode.GetString(b)中;

转换为ASCII结果为63或"?"

ASCIIEncoding.ASCII.GetString(b)中;

如果这不可能,处理这些数据的最佳方法是什么?我希望能够执行像Replace()这样的字符串函数.



1> Richard..:

字节189代表iso-8859-1(又名"Latin-1")中的"½",因此以下可能是您想要的:

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

.NET中的所有字符串和字符都是UTF-16编码的,因此您需要使用编码器/解码器来转换其他任何内容,有时这是默认的(例如,对于FileStream实例使用UTF-8),但良好的做法是始终指定.

您将需要某种形式的隐式或(更好)显式元数据来为您提供有关哪种编码的信息.



2> 小智..:

在IBM和微软向PC世界引入Code Pages的想法之前,旧的PC-8或扩展的ASCII字符集已经出现.这是WAS扩展ASCII - 在1982年.实际上,它是当时PC上唯一可用的字符集,直到EGA卡允许您将其他字体加载到VRAM中.

这也是ANSI终端的默认标准,几乎我在80年代和90年代早期拨打的每个BBS都使用这个字符集来显示菜单和框.

这是将8位扩展ASCII转换为Unicode文本的代码.注意代码的关键位:GetEncoding("437").使用Code Page 437将8位ASCII文本转换为Unicode等效文本.

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



3> Jon Skeet..:

这取决于编码的确切内容.

没有"ASCII 189"这样的东西 - ASCII只能达到127.有许多编码使用ASCII作为前128个值的8位编码.

可能想要Encoding.Default(这是您的特定系统的默认编码),但很难确切知道.您的数据来自哪里?

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有