代码之家  ›  专栏  ›  技术社区  ›  Seva Alekseyev

gcc下的2字节(ucs-2)宽字符串

  •  3
  • Seva Alekseyev  · 技术社区  · 14 年前

    当将我的VisualC++项目移植到GCC时,我发现默认情况下,WCHARIGT数据类型是4字节UTF32。我可以用编译器选项覆盖它,但随后rtl的整个wcs*(wcslen、wcscmp等)部分被呈现为不可用,因为它采用4字节宽的字符串。

    目前,我已经从头开始重新实现了其中的5-6个函数,并在中定义了我的实现。但是有没有一个更优雅的选择-比如说,一个2字节wchar-t的gcc rtl构建静静地坐在某处,等待链接?

    我所追求的gcc的具体风格是mac os x上的xcode、cygwin以及debian linux etch附带的xcode。

    4 回复  |  直到 10 年前
        1
  •  2
  •   greyfade    14 年前

    但是有没有一个更优雅的选择-比如说,一个2字节wchar-t的gcc rtl构建静静地坐在某处,等待链接?

    不。这是一个特定于平台的问题,不是gcc的问题。

    也就是说,linux平台abi指定 wchar_t 是32位宽,所以要么你必须使用一个全新的库(icu是一个流行的选择),要么移植你的代码来处理4位 乌恰 所有可能链接到的库也将假定为4字节 乌恰 如果你使用GCC的 -fshort-wchar .

    但在linux上,几乎每个人都在utf-8上对所有多字节编码进行了标准化。

        2
  •  1
  •   bmargulies    14 年前

    看看 ICU library . 它是一个带有utf-16api的可移植库。

        3
  •  1
  •   Yann Ramin    14 年前

    正如您所注意到的,wchar_t是实现定义的。无法使用该数据类型进行可移植工作。

    一般来说,在整个ucs-2崩溃被宣布为一个不太好的主意之后,linux系统的优势是后来获得了unicode支持,并使用utf-8作为编码。所有系统api仍然在char*上运行,并且是unicode安全的。

    你最好的办法是使用一个为你管理的库:qt、icu等。

    请注意,cygwin具有一个2字节的wchar_t,使与windows的啮合更容易。

        4
  •  0
  •   Seva Alekseyev    14 年前

    重新实现了5-6个更常见的wcs*函数,在中定义了我的实现。