我正在尝试使用C#编码(1251)编写文件(myfile.txt),但结果与VB.net不同。 当我用VB.net写它时我得到不同的结果,当我用C#写它时得到不同的结果,VB.net结果是正确的,有人可以帮我转换来自C#的CHARS像VB.net那样吗? / p>
以下是我使用的VB.net代码:
Dim path As String = "C:\\file\\myfile.txt"
Dim objWriter As New StreamWriter(path, False, System.Text.Encoding.GetEncoding(1251))
objWriter.Write(Chr(32) & Chr(48) & "1,0001,1" & vbCrLf)
objWriter.Write(Chr(34) & Chr(49) & "Cola" & Chr(10) & "2l" & Chr(9) & Chr(194) & "60.00" & "*" & "1.000" & vbCrLf)
objWriter.Write(Chr(35) & Chr(53) & Chr(9) & "C" & "300" & vbCrLf)
objWriter.Write(Chr(36) & Chr(53) & Chr(9) & vbCrLf)
objWriter.Write(Chr(36) & Chr(56))
objWriter.Flush()
objWriter.Close()
这是我用来编码为1251的C#代码
string path = "C:\\file\\myfile.txt";
StreamWriter objWriter = new StreamWriter(path, false, System.Text.Encoding.GetEncoding(1251));
objWriter.Write((char)32 + (char)48 + "1,0001,1" + "\r\n");
objWriter.Write((char)34 + (char)49 + "Cola" + (char)10 + "2l" + (char)9 + (char)194 + "60.00" + "*" + "1.000"+"\r\n");
objWriter.Write((char)35 + (char)53 + (char)9 + "C" + "300" + "\r\n");
objWriter.Write((char)36 + (char)53 + (char)9 + "\r\n");
objWriter.Write((char)36 + (char)56);
objWriter.Flush();
objWriter.Close();
答案 0 :(得分:3)
那些是不同的。在第2行中,您的vb示例使用chr(34)
,但您的c#示例使用(char)33)
。我在整个代码中看到了同样的问题,而不只是在那个地方。
编辑:如果您没有发现问题,则无法为流写入不同的值并期望得到相同的结果。上述问题应使用34
作为两个应用中的值。如果您在VB中使用Chr(34)
,请在C#中使用(char)34
,而不是(char)33
。
编辑2 :最后一个问题是您的\r\n
。它应该是\n\r
,或者更好的是,使用(char)Environment.NewLine
如果您希望它们输出相同的值,请在代码中以相同的顺序使用相同的值。 vb和C#之间的编码没有区别。
答案 1 :(得分:1)
将上次“写入”调用更改为:
objWriter.Write(((char)36).ToString() + ((char)56).ToString());
VB调用正确的'Write'字符串重载方法,因为VB语法显然将参数标识为字符串。你拥有它的C#语法将导致两个字符的int sum被传递(到'Write'Int32重载) - 你必须使用'ToString'来传递两个字符的串联。 (其他'Write'调用没有这个问题,因为它们涉及明确的字符串连接。)