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

时间:2017-10-30 16:49:04

标签: c# encoding streamwriter

我正在重写一些遗留软件。

此旧版软件使用来自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("ª"); //虽然这个字符通常出现在字符串变量的中间。

1 个答案:

答案 0 :(得分:2)

如果用UTF-8编写170,它实际上会写入194 170,这是Windows-1252中的ª-但是ª以UTF-8

使用

var streamWriter = new StreamWriter(someBaseStream,Encoding.UTF8);

肯定会引起你的问题。

但是,您注释掉的替代方案并不完全正确; .GetEncoding("windows-1252"));

应该{​​{1}}注意大写字母W.

或删除任何疑问使用

.GetEncoding("Windows-1252"));