4

我刚刚使用 CC 编译器在 SUN Solaris 上编译了一个 C++ 应用程序(CC:Sun C++ 5.9 SunOS_sparc Patch 124863-01 2007/07/2)。该应用程序使用 ICU 支持全球化。但是,在运行应用程序时,我们在方法ucnv_open("ibm-9448_X100-2005", &status)上遇到了以下错误

19-Jun 12:12:27 [0]:error opening ICU converter: U_FILE_ACCESS_ERROR


XalanCtrl::XalanCtrl()
  :dLanguage  ( "" ),
   dLegendPage( "" ),
   dLayoutDir ( "" ),
   dBillDocuRoot(""),
   dBillImageRoot("")
{
    dpTransformer = new XalanTransformer();
    myCallback = new CallbackHandler();

  // Create ICU converter
    UErrorCode status=U_ZERO_ERROR;
    const char *erMes;

    ICUcnv = ucnv_open("ibm-9448_X100-2005", &status);
    if(U_FAILURE(status))
     {
      erMes=u_errorName(status );
      tout0 << "error opening ICU converter: " << erMes << endl;
      terr << "FATAL error opening ICU converter: " << erMes << endl;
      throw std::runtime_error( "error opening ICU converter" );
     }
 // Create the ICU buffer used for transcoding
    ICUSize=1024;
    ICUBuffer=new char[ICUSize];
}

同一个应用程序运行良好,但它是在另一个环境中编译的。这与应用程序构建或编译器有关?我期待一些 IUC 变量或配置未设置,但不确定。您对如何解决此类问题有任何想法吗?

任何帮助将不胜感激 :)

提前致谢

问候,

4

2 回答 2

4

答案在这里

环境变量 ICU_DATA 可以设置为数据目录的完整路径名,以指示在您不使用共享库时(例如,通过使用 .dat 存档或单个数据文件)时区域设置数据文件和转换映射表的位置。目录名称后面必须有结尾的“/”(例如,“$Root/source/data/out/”可以,但值“$Root/source/data/out”是不可接受的)。如果完整的共享数据库在您的库路径中,则无需设置 ICU_DATA。

于 2013-06-20T15:33:35.323 回答
0

如果你真的想要那个确切的转换器,你可以使用ibm-9448_X100-2005- 那是内部名称,大多数人只会使用windows-1256并获得正确的别名。也就是说,还有其他转换器工作吗?是否有可能您的 ICU 是在没有那个精确转换器的情况下建造的?

于 2013-06-22T01:56:23.500 回答