1. 程式人生 > >unity 釋出為 PC版本後 報錯為:codepage 936 not supported

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也可以正常使用了~