例如:“½”或 ASCII DEC 189。当我从文本文件中读取字节时,byte[] 包含有效值,在本例中为 189。
转换为 Unicode 会导致 Unicode 替换字符 65533。
UnicodeEncoding.Unicode.GetString(b);
转换为 ASCII 结果为 63 或“?”
ASCIIEncoding.ASCII.GetString(b);
如果这是不可能的,那么处理这些数据的最佳方法是什么?我希望能够执行像 Replace() 这样的字符串函数。
例如:“½”或 ASCII DEC 189。当我从文本文件中读取字节时,byte[] 包含有效值,在本例中为 189。
转换为 Unicode 会导致 Unicode 替换字符 65533。
UnicodeEncoding.Unicode.GetString(b);
转换为 ASCII 结果为 63 或“?”
ASCIIEncoding.ASCII.GetString(b);
如果这是不可能的,那么处理这些数据的最佳方法是什么?我希望能够执行像 Replace() 这样的字符串函数。
字节 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),但最好始终指定。
您将需要某种形式的隐式或(更好的)显式元数据来为您提供有关哪种编码的信息。
旧的 PC-8 或扩展 ASCII 字符集在 IBM 和 Microsoft 将 Code Pages 的概念引入 PC 世界之前就已经存在。这是 1982 年的扩展 ASCII。事实上,它是当时 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);
}
这取决于编码是什么。
没有“ASCII 189”之类的东西 - ASCII 只能达到 127。有许多编码,其中 8 位编码使用 ASCII 作为前 128 个值。
您可能想要Encoding.Default(这是您特定系统的默认编码),但很难确定。你的数据是从哪里来的?
System.String[]如果您尝试处理任何扩展的 ASCII 字符,则无法存储字符,ASCII > 127
例如œ ¢ ½ ¾这里是将其转换为二进制和十进制等价物的方法