VB.net转C#char编码(1251)转换

时间:2015-02-06 21:13:48

标签: c# vb.net char

我正在尝试使用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();

2 个答案:

答案 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'调用没有这个问题,因为它们涉及明确的字符串连接。)