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

VB.net to C# char Encoding (1251) conversion

我正在尝试使用 C# 编码 (1251) 编写文件 (myfile.txt),但结果与 VB.net 不同。 当我用 VB.net 编写它时,我得到不同的结果,当我用 C# 编写它时,我得到不同的结果,而 VB.net 结果是正确的,有人可以帮我从 C# 转换 CHARS,例如 VB.net 是吗?

这是我使用的 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 行中,您的 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# 之间的编码没有区别。

将最后一次 'Write' 调用更改为:

objWriter.Write(((char)36).ToString() + ((char)56).ToString());

VB 调用正确的 'Write' 字符串重载方法,因为 VB 语法显然将参数标识为字符串。您拥有的 C# 语法将导致传递两个字符的 int 总和(至 'Write' Int32 重载)- 您必须使用 'ToString' 传递两个字符的串联。 (其他 'Write' 调用没有这个问题,因为它们涉及明确的字符串连接)。