Unity3d發布的iOS產品中使用GB2312字符編碼(CP936)


最近在開發中要用到GB2312字符編碼(CP936),在C#代碼中便有了如此代碼

1 System.Text.Encoding.GetEncoding(936)

這在Unity3d 編輯器下運行沒有任何問題,打包出exe文件執行時,便會出現程序無響應的情況,查看日志文件可以看到如下錯誤:

  NotSupportedException: CodePage 936 not supported

谷歌后...便將I18N.DLLI18N.CJK.DLL 從Unity安裝目錄(Editor\Data\Mono\lib\mono\unity 和 Editor\Data\Mono\lib\mono\2.0 兩個目錄下都存在,PC上測試均可使用)拷貝到項目目錄的Assets目錄下,然后重新編譯出包,正常運行。

      在出iOS包時,又再次出現 NotSupportedException: CodePage 936 not supported。前面雖然已經把相關庫文件放到項目之中,但仔細查看xcode工程目錄,其下並沒有I18N.DLL 和 I18N.CJK.DLL 文件的任何影子。此時便想到我們的unity項目中使用的stripping level可能會有影響,索性暫時disable stripping,嘗試重新出iOS包,發現一切正常,再看xcode工程目錄下果然也有了I18N.DLL 和 I18N.CJK.DLL。

 

那么,問題又來了,如果仍想繼續使用stripping,有沒有辦法?

unity 官方手冊(http://docs.unity3d.com/Manual/iphone-playerSizeOptimization.html)中提到,可以通過添加白名單的方式,在使用stripping時,忽略掉指定的庫。方式是在Assets根目錄下添加link.xml文件,其內容格式如下

1 <?xml version="1.0" encoding="utf-8"?>
2 <linker>
3   <assembly fullname="I18N">
4       <type fullname="I18N.Common.Manager" preserve="all"/>
5   </assembly>
6   <assembly fullname="I18N.CJK">
7       <type fullname="I18N.CJK.CP936" preserve="all"/>
8   </assembly>
9 </linker>

使用CP936,只需要添加上述內容。

如此,將該link.xml文件添加到Assets根目錄下后,開啟stripping后,CP936也可以正常使用了~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM