StreamWriter在Ascii值128上为每个字符写入2个字符。如何只写1个字符?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StreamWriter在Ascii值128上为每个字符写入2个字符。如何只写1个字符?相关的知识,希望对你有一定的参考价值。
我正在重写一些遗留软件。
此遗留软件使用来自sql server的数据使用bcp创建文件。
新软件已经取代了bcp方法,并在C#应用程序中使用StreamWriter来创建文件。
我需要匹配旧版输出和新输出,因为我们不能在文件中引入任何差异。
我遇到上面的字符(字符)128有问题。大于128的任何内容都会为每个原始字符写入2个字符。
因此,在旧文件中,此字符出现ª
当我尝试使用StreamWriter编写此字符时,它被写为ª
在这种情况下,字符值是170(这可能根据使用的编码而不同)。
我尝试过使用StreamWriter进行各种编码,我尝试过UTF7,UTF8,甚至UTF32,我也使用了编码1252,但都生成了2个字符。
低于128的所有其他字符根据需要写为一个字符。我只需要写一个(char)170的单个字符,但我找不到如何使用StreamWriter,因为默认情况下它产生两个字符。
有人可以帮忙吗?
编辑:
感谢您的评论。 TyCobb,这是代码,它是非常基本的
var streamWriter = new StreamWriter(someBaseStream,Encoding.UTF8);//.GetEncoding("windows-1252"));
然后简化:streamWriter.Write("ª");
//虽然这个字符通常出现在字符串变量的中间。
如果用UTF-8编写170,它实际上会写入194 170,这是Windows-1252中的ª,但是ª以UTF-8编写
运用
var streamWriter = new StreamWriter(someBaseStream,Encoding.UTF8);
肯定会引起你的问题。
但是,您注释掉的替代方案并不完全正确; .GetEncoding("windows-1252"));
它应该是.GetEncoding("Windows-1252"));
注意首都W.
或删除任何疑问使用
var streamWriter = new StreamWriter(someBaseStream, Encoding.GetEncoding(1252));
以上是关于StreamWriter在Ascii值128上为每个字符写入2个字符。如何只写1个字符?的主要内容,如果未能解决你的问题,请参考以下文章
机器人框架 - UnicodeDecodeError:“ascii”编解码器无法解码位置 49 的字节 0xe9:输入文本时序数不在范围内(128)