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

StreamWriter writing 2 characters per character over Ascii value 128. How to write just 1 character?

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

此遗留软件使用来自 sql 服务器的数据使用 bcp 创建文件。

新软件取代了bcp方法,在C#应用程序中使用StreamWriter来创建文件。

我需要将旧输出和新输出完全匹配,因为我们不能在文件中引入任何差异。

我在处理 (char)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));