我正在尝试将代码从VC++迁移到.net。 VC++代码使用WinAPI提供的MultibyteToWideChar和WideCharToMultiByte函数。我尝试在.NET中使用System.Text.Encoding类,但它不适用于所有编码。有没有其他的方式来做这种转换?下面的代码片段有什么问题?.NET中MultibyteToWideChar和WideCharToMultiByte函数的替代方法是什么?
这里是我的C#代码:
public static string MultiByteToWideChar(string input, int codepage)
{
Encoding e1 = Encoding.GetEncoding(codepage);
Encoding e2 = Encoding.Unicode;
//byte[] source = e1.GetBytes(input);
byte[] source = MBCSToByte(input);
byte[] target = Encoding.Convert(e1, e2, source);
return e2.GetString(target);
}
public static string WideCharToMultiByte(string input, int codepage)
{
Encoding e1 = Encoding.Unicode;
Encoding e2 = Encoding.GetEncoding(codepage);
byte[] source = e1.GetBytes(input);
byte[] target = Encoding.Convert(e1, e2, source);
return Encoding.GetEncoding(codepage).GetString(target);
}
private static byte[] MBCSToByte(string s)
{
byte[] b = new byte[s.Length];
int i = 0;
foreach (char c in s)
b[i++] = (byte)c;
return b;
}
的MultiByteToWideChar工作只为代码页1255而不是866
调用WideCharToMultiByte是不工作的代码页1251
什么是不工作,你为什么要使用C++函数名的东西** **完全不同? 'Encoding'没有问题。如果您使用正确的代码页,它可以将任何内容从一种编码转换为另一种编码。结束工作在其他功能上仅仅是保证你会得到转换错误 –
总结 - *什么*你要转换? 1255到Unicode? 1255至866?完全相同的代码可以在任何情况下工作 –
.NET字符串是Unicode * always *。你是否试图修复一个损坏的字符串?没有多字节或宽字符串。如果你想将一个字符串转换为一个1255字节数组只需使用'Encoging.GetEncoding(1255).GetBytes(someString);'。如果你想从1255阵列得到一个Unicode字符串,用'Encoging.GetEncoding(1255).GetString(someString);我正在写' –