zoukankan      html  css  js  c++  java
  • 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安装目录(EditorDataMonolibmonounity 和 EditorDataMonolibmono2.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也可以正常使用了~

  • 相关阅读:
    SURF与SIFT
    CVMAT操作
    flask
    爬虫
    mysql基础
    WINCE6.0_CHS_SDK安装失败
    com.microsoft.sqlserver.jdbc.SQLServerException: 通过端口 1443 连接到主机 localhost 的 TCP/IP 连接失败。
    office 2010每次打开word都要重新配置的解决方法
    如何使用Visual Studio 2008编译C语言
    Hibernate初学、遇到的问题
  • 原文地址:https://www.cnblogs.com/cqgreen/p/4101599.html
Copyright © 2011-2022 走看看