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个字符?的主要内容,如果未能解决你的问题,请参考以下文章

StreamWriter 在写入文本文件中途停止写入

C#中StreamWriter类使用总结

如何使用 Perl 在文件中查找扩展的 ASCII 字符?

机器人框架 - UnicodeDecodeError:“ascii”编解码器无法解码位置 49 的字节 0xe9:输入文本时序数不在范围内(128)

C语言char类型数据是否远远不止ASCII码

普通文本中最少使用的分隔符 < ASCII 128