2013-07-07 37 views
0

我正在閱讀Mono's marshalling guide,目的是編組Objective-C++和Unity之間的字符串(用於iOS遊戲),並且我對Mono中的字符串編組編碼有些困惑。我知道用於編組的字符串編碼是由CharSet枚舉指定的,但它只允許Ansi和Unicode(= UTF-16)(和Auto,但它只是讓運行時間在前兩個之間進行選擇)指定的編組。Mono在P/Invoke中編組字符時使用什麼編碼?

但該指南還一直在說,單聲道編組UTF-8中的字符串。這怎麼可能?如果沒有指定CharSet,會發生這種魔術嗎?如果我沒有指定CharSet,這是否意味着我可以安全地將Objective-C++中的[NSString UTF8String]傳遞給C#?這是否意味着與微軟的運行時間不兼容?

+0

狼瘡說的肯定是非常合理的。如果有一些真實的文檔可以讓你放心,你會很高興。您鏈接到的Mono文檔非常薄弱。 –

+0

你是對的,在撰寫這些文字時,單元類在Mono文檔中完全沒有記載:-( –

回答

3

Ansi字符集值在非Windows操作系統上沒有意義,所以在這種情況下,使用utf-8,就像使用iOS一樣。

這是與MS運行時不兼容的情況,但在這種情況下更大的不兼容性是MS運行時根本無法在iOS上運行:)。

+0

經驗證明是正確的,謝謝! –

-1

在java中,如果你想從一個exe文件中提取字符串,
(至少,通過單搬運工圖像製作2018年1月的一個)
使用new String(exeFileByteArray,"UTF-16LE")

你應該始終明確聲明endian-編碼的字符串/二進制文件/無論什麼;最好是你可以控制輸入,所以它的編碼是正確的,但是如果你必須閱讀跨平臺的可執行文件,你應該測量(編寫一個測試)你是否得到大端或小端(甚至更好,如果你的文件格式有一些頭位,比如0xCAFEBABE,你可以簡單地測試一下是小的還是大的endian,然後用它來選擇正確的算法)。