ucnv_open error U_FILE_ACCESS_ERROR

ucnv_open error U_FILE_ACCESS_ERROR

本文关键字:ACCESS ERROR FILE error open ucnv      更新时间:2023-10-16

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

任何帮助都将是感激的:)

Thanks in advance

认为,

答案在这里

可以将环境变量ICU_DATA设置为数据目录的完整路径名,以指示在不使用共享库(例如,通过使用.dat归档文件或单个数据文件)时语言环境数据文件和转换映射表的位置。目录名后面需要加"/"(例如:"$Root/source/data/out/"可以,但"$Root/source/data/out"是不可接受的)。如果完整的共享库在您的库路径中,则不需要设置ICU_DATA。

如果你真的想要那个确切的转换器,你可以使用ibm-9448_X100-2005 -那是内部名称,大多数人只会使用windows-1256并获得正确的别名。也就是说,还有其他转换器可以工作吗?有没有可能你的重症监护室没有那个转换器?

相关文章: