我正在使用C#开发一个应用程序,需要读写特定的数据文件格式。目前唯一的问题是该格式严格使用单字节字符,而当我使用writer和char数组时,C#会试图插入Unicode(这会使文件大小翻倍,还会带来其他严重问题)。我一直在修改代码,改为使用byte数组,但是当将它们输入到树形视图和数据网格控件中时,会出现一些问题,并涉及转换等问题。
我花了一点时间搜索,似乎没有一种简单的typedef可以用于强制程序使用字节类型而不是Unicode,至少不能不引起额外的复杂性。
有没有一种简单的方法可以强制C# .NET程序仅使用ASCII,而不触及Unicode?
稍后,我几乎搞定了这个问题。在BinaryReader/Writers上使用ASCIIEncoding解决了大部分问题(一些字符串前会多一个字符的问题出现了,但我已经解决了)。我还有一个很小但可能很大的问题:在文件中,一个特定的字符(打印为欧元符号)在加载/保存文件时被转换为“?”。这在文本中不是问题,但如果发生在记录长度中,它可能会改变几千字节的大小(显然不好)。我认为这是由编码引起的,但如果它来自文件,为什么它不会回去呢?
具体问题/结果如下:
原始文件:0x80(欧元) 编码: - ASCII:0x3F(?) - UTF8:0xC280(A-hat欧元)
我花了一点时间搜索,似乎没有一种简单的typedef可以用于强制程序使用字节类型而不是Unicode,至少不能不引起额外的复杂性。
有没有一种简单的方法可以强制C# .NET程序仅使用ASCII,而不触及Unicode?
稍后,我几乎搞定了这个问题。在BinaryReader/Writers上使用ASCIIEncoding解决了大部分问题(一些字符串前会多一个字符的问题出现了,但我已经解决了)。我还有一个很小但可能很大的问题:在文件中,一个特定的字符(打印为欧元符号)在加载/保存文件时被转换为“?”。这在文本中不是问题,但如果发生在记录长度中,它可能会改变几千字节的大小(显然不好)。我认为这是由编码引起的,但如果它来自文件,为什么它不会回去呢?
具体问题/结果如下:
原始文件:0x80(欧元) 编码: - ASCII:0x3F(?) - UTF8:0xC280(A-hat欧元)
这两种结果都不可行,因为文件中的任何位置都可能发生变化(如果一个80在记录长度int中变成了3F,则可能相差65 *(256 ^ 3))。不好。我尝试使用UTF-8编码,认为它会很好地解决问题,但现在它正在添加第二个字符,这甚至更糟。