我正在嘗試將代碼從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);我正在寫' –