unity 釋出為 PC版本後 報錯為:codepage 936 not supported
一直檢查不出來是什麼問題,經查閱資料通過兩步解決:
一、https://www.cnblogs.com/zhuweisky/p/3145130.html
二、https://www.cnblogs.com/cqgreen/p/4101599.html
具體為:
(1)生成時 player setting 中 這樣設定
(2)
最近在開發中要用到GB2312字元編碼(CP936),在C#程式碼中便有了如此程式碼
1 System.Text.Encoding.GetEncoding(936)
這在Unity3d 編輯器下執行沒有任何問題,打包出exe檔案執行時,便會出現程式無響應的情況,檢視日誌檔案可以看到如下錯誤:
NotSupportedException: CodePage 936 not supported
谷歌後...便將I18N.DLL 和 I18N.CJK.DLL 從Unity安裝目錄(Editor\Data\Mono\lib\mono\unity 和 Editor\Data\Mono\lib\mono\2.0 兩個目錄下都存在,PC上測試均可使用)拷貝到專案目錄的Assets目錄下,然後重新編譯出包,正常執行。
我只做到這一步後,問題就解決。後面的具體 stripping level 專案沒有找到,我的unity 版本 5.3.2f1
在出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也可以正常使用了~