[英]How does WChar relate to Unicode and ASCII
我將要表明我對編碼的工作方式和不同的字符串格式的完全無知。
我傳遞一個字符串到一個編譯器(微軟,因為它發生了他們的飛行模擬器)。 該字符串作為XML文檔的一部分傳遞,該文檔用作編譯器的源。 這是使用標准NET字符串創建的。 我不需要專門指定任何類型的編碼或設置,因為XML只是文本。
字符串只是一個字符集合。 這是一個給出錯誤的示例:
ARG,AFL,AMX,ACA,DAH,CCA,AEL,AGN,MAU,SEY,TSC,AZA,AAL,ANA,BBC,CPA,CAL,COA,CUB,DAL,UGX,ELY,UAE,ERT,ETH, EEZ,GHA,IRA,JAL,NWA,KAL,KAC,LAN,LDI,MAS,MEA,PIA,QTR,RAM,RJA,SVA,SIA,SWR,ROT,THA,THY,AUI,UAL,USA,ACA, TAR,UZB,IYE,QFA
如果我使用我的C#托管程序創建字符串,則沒有問題。 但是,這個字符串來自一個c ++程序,它可以使用不同於MS的編譯器創建編譯文件
MS編譯器不喜歡該字符串。 它拋出兩個錯誤:
內部編譯器錯誤:#C2621:無法轉換WChar字符串! 內部編譯器錯誤:#C2029:無法從UNICODE轉換屬性值!
遺憾的是,編譯器的錯誤沒有任何有用的文檔。 我們只是看到了我們看到的最好的東西!
我見過這種類型的其他錯誤,但這些錯誤包含我可以捕獲和刪除的隱藏字符和控制字符。
在這種情況下,我將字符串看作Char []並且看不到任何異常。 只有我所期待的。 沒有高於ascii限制127的值,也沒有控制字符。
我知道WChar是C ++理解的東西(但我不知道),Unicode是字符的雙字節表示,ASCII是單字節表示。
我想做兩件事 - 首先確定一個字符串,如果傳遞給編譯器將失敗,第二個修復字符串。 我假設編譯器期望ASCII。
編輯
我說的是一個不實之詞 - 事實上我確實使用了編碼。 我檢查了用於將字節數組轉換為字符串的代碼。
public static string Bytes2String(byte[] bytes, int start, int length) {
string temp = Encoding.Defaut.GetString(bytes, start, length);
}
我意識到Default可能是一個問題,但將其更改為ASCII沒有任何區別。 我開始相信錯誤信息不是它看起來的樣子。
看起來你正在使用一個字節數組,並使用Encoding.Default
返回的Encoding.Default
將其轉換為字符串。
建議您不要這樣做( 在Microsoft文檔中 )。
您需要確定在C ++程序中使用什么編碼來生成字節數組,並使用相同的(或兼容的)在C#代碼中將字節數組再次轉換回字符串。 例如,如果字節數組使用ASCII編碼,您可以使用:
System.Text.ASCIIEncoding.GetString(bytes, start, length);
要么
System.Text.UTF8Encoding.GetString(bytes, start, length);
PS我希望喬爾沒有抓住你 ;)
我必須坦白 ,編譯器錯誤無關與字符串的編碼格式。 事實證明,它是錯誤的字符串的長度。 根據示例,有許多以逗號分隔的條目。 如果條目計數超過50,編譯器會拋出相當不友好的消息。
不過感謝大家的幫助 - 它在我的腦海中提出了編碼問題,現在我將更仔細地看一下
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.