繁体   English   中英

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

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

我正在重写一些旧版软件。

该旧版软件使用来自SQL Server的数据使用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,它将实际写194170,这在Windows-1252中是but,而在UTF-8中是ª

使用

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

肯定会导致您的问题。

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

它应该是.GetEncoding("Windows-1252")); 注意大写W。

或消除任何疑问的使用

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM