ucnv_open错误U_FILE_ACCESS_ERROR

时间:2013-06-19 09:16:27

标签: c++ c icu

我刚刚使用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变量或配置没有设置,但不确定。 你对如何解决这类问题有任何想法吗?

任何帮助将不胜感激:)

提前致谢

此致

2 个答案:

答案 0 :(得分:4)

这里是answer

  

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

答案 1 :(得分:0)

如果你真的想要那个精确的转换器,你可以使用ibm-9448_X100-2005 - 这是内部名称,大多数人只会使用windows-1256并获得正确的别名。那就是说,其他任何转换器都有效吗?你的ICU是否有可能没有那么精确的转换器?