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