0
我有一個非託管代碼調用的接口。它通過一個BSTR類型,但數據是ASCII字符串。當它被寫入文件時,我看到了意想不到的字符。我想到數據如何傳輸非託管[BSTR [ASCII]] - >託管[字符串[ASCII]] - >文件[Unicode [ASCII]],以便輸入處的字符應與輸出處的字符相同。它是否正確?下面是非託管代碼調用的接口函數。使用編組的BSTR類型來傳遞ASCII字符串
//C# interface called by unmanged code
public void WriteOutFile([In] [MarshalAs(UnmanagedType.BStr)] String asciiData)
{
File.WriteAllText(fileName, asciiData);
}
ascii到BSTR的轉換髮生在本地代碼中。 BSTR是一個unicode字符串。在你的C#方法被調用的時候,對它做任何事情都太遲了。這是C/C++代碼中的一個非常典型的問題,但這是您需要修復的地方。如果你真的絕望,那麼你可以嘗試使用Encoding.Default.GetBytes()轉換回字節並應用正確編碼的GetString()方法。這通常不起作用,因爲原始編碼是有損的。 –