我即將展示我完全不知道編碼如何工作以及不同的字符串格式。WChar如何與Unicode和ASCII相關
我傳遞一個字符串到編譯器(微軟,因爲它發生amd他們的飛行模擬器)。該字符串作爲用作編譯器源的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沒有區別。我開始相信錯誤信息不是它所看到的。
什麼編譯?你如何將一個字符串傳遞給編譯器? –
編譯器被稱爲BglComp。它特定於微軟的Flight Sims,它會生成一個模擬人所理解的風景文件(.bgl)。該字符串作爲XML文檔中的一個屬性傳遞。 XML是此編譯器的源代碼 – ScruffyDuck
*我不需要參與任何編碼或設置類型,因爲XML只是文本。*編碼*總是*會發生,無論您是否明確指定它。把編碼想象成「將人類語言的字母映射到字節序列」 - 不可能「不做」它。 – Jon