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));
我正在重写一些遗留软件。
此遗留软件使用来自 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));