ucnv_open error U_FILE_ACCESS_ERROR

4

我刚刚使用CC编译器(CC:Sun C++ 5.9 SunOS_sparc Patch 124863-01 2007/07/2)在SUN Solaris上编译了一个C ++应用程序。该应用程序使用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 变量或配置未设置,但不确定。你有任何解决此类问题的想法吗?

非常感谢您提供的任何帮助 :)

提前致谢

祝好!


你尝试过用谷歌搜索这个错误吗?例如,它可能是你的情况 http://permalink.gmane.org/gmane.comp.lib.icu.c%2B%2B.support/1026 - Sergei Nikulov
是的,我在谷歌上查看了那个线程,但是我没有理解它的意思。听起来好像我需要将一个名为ICU_DATA的变量设置为某个我不知道的值 :) - jamel
你使用的是哪个版本的ICU?一般来说,U_FILE_ACCESS_ERROR意味着ICU无法加载某些内部资源。 - Sergei Nikulov
1
环境变量ICU_DATA可以设置为数据目录的完整路径名,以指示当您不使用共享库(例如通过使用.dat存档或单个数据文件)时,区域设置数据文件和转换映射表的位置在哪里。目录名称后面需要加上“/”(例如,“$Root/source/data/out/”将起作用,但值“$Root/source/data/out”是不可接受的)。如果完整的共享数据库在您的库路径中,则无需设置ICU_DATA。 - Sergei Nikulov
顺便提一下,在这里我找不到4_1版本的任何标签:http://source.icu-project.org/repos/icu/icu/tags/。 - Sergei Nikulov
是的,Sergey,你是对的,我的版本应该是4.4.1。谢谢。 - jamel
2个回答

4

在这里找到答案

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


0

如果您确实需要使用精确的转换器,可以使用ibm-9448_X100-2005 - 这是内部名称,大多数人将只使用windows-1256并获得正确的别名。话虽如此,其他转换器是否有效?您的ICU是否可能是在没有该精确转换器的情况下构建的?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接