StreamWriter在Ascii值128上为每个字符写入2个字符。如何只写1个字符?

问题描述 投票:0回答: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("ª"); //虽然这个字符通常出现在字符串变量的中间。

c# encoding streamwriter
1个回答
2
投票

如果用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));
© www.soinside.com 2019 - 2024. All rights reserved.