[英]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.