簡體   English   中英

WChar如何與Unicode和ASCII相關

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM