ssu*_*ube 5 .net c# unicode ascii
我正在使用C#编写应用程序,需要从特定的数据文件格式进行读写.目前唯一的问题是格式使用严格的单字节字符,当我使用writer和char数组时,C#一直试图抛出Unicode(这会使文件大小增加一倍,以及其他严重的问题).我一直在努力修改代码以使用字节数组,但是在将它们提供给树视图和数据网格控件时会引起一些抱怨,并且它涉及转换等等.
我花了一点时间谷歌搜索,似乎没有一个简单的typedef我可以用来强制char类型使用字节为我的程序,至少不会没有造成额外的复杂性.
是否有一种简单的方法可以强制C#.NET程序仅使用ASCII而不接触Unicode?
后来,我得到了这个几乎工作.使用ASCIIEncoding的BinaryReader在/作家结束了固定的大多数问题(一些问题有一个多余的字符被前置到字符串发生,但我固定的了).我有一个最后一个问题,它很小但可能很大:在文件中,?当我加载/保存文件时,特定字符(打印为欧元符号)转换为a .这在文本中并不是一个问题,但如果它出现在记录长度上,它可能会改变大小千字节(显然不是很好).我认为它是由编码引起的,但如果它来自文件,为什么不回来呢?
确切的问题/结果如下:
原始文件:0x80(欧元)
编码:**ASCII:0x3F(?)**UTF8:0xC280(A-hat euro)
这些结果都不会起作用,因为文件中的任何位置都可以更改(如果在记录长度int中将80更改为3F,则可能是65*(256 ^ 3)的差异).不好.我尝试使用UTF-8编码,认为这样可以很好地解决问题,但它现在正在添加第二个字符,这更糟糕.
Ree*_*sey 24
C#(.NET)将始终使用Unicode作为字符串.这是设计的.
但是,当您读取或写入文件时,可以使用StreamReader/StreamWriter设置强制ASCII编码,如下所示:
StreamReader reader = new StreamReader (fileStream, new ASCIIEncoding());
Run Code Online (Sandbox Code Playgroud)
然后只需使用StreamReader阅读.
写作是一样的,只需使用StreamWriter.
.NET中的Interally字符串总是Unicode,但实际上你不应该对它感兴趣.如果您需要遵循特定格式,那么您关闭的路径(以字节形式读取)是正确的.你只需要使用System.Encoding.ASCII类从做您的转换string->byte[]和byte[]->string.
| 归档时间: |
|
| 查看次数: |
5454 次 |
| 最近记录: |