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