代码之家  ›  专栏  ›  技术社区  ›  user2189331

C/C++中的跨平台通用文本处理++

  •  2
  • user2189331  · 技术社区  · 17 年前

    目前以独立于平台的方式处理通用文本的最佳实践是什么?

    例如,在Windows上有API的“A”和“W”版本。在C层,我们有“_tcs”函数(如_tcscpy),它们映射到“wcscpy”或“strcpy”。在STL中,我经常使用这样的东西:

    typedef std::basic_string<TCHAR> tstring;
    

    3 回复  |  直到 17 年前
        1
  •  2
  •   coppro    17 年前

    不支持通用(可变宽度)字符,如 TCHAR wchar_t ,但编码不能保证。一旦我们有了C++1x,它将大大改进 char16_t char32_t 以及UTF-{8,16,32}文本。

    我个人不太喜欢通用字符,因为它们会导致一些严重的问题(比如转换),更重要的是,如果你使用一个类型(比如 察尔 )它的最大宽度可能是8,你也可以用 char 。如果你真的需要向后兼容性,只需使用UTF-8;它被专门设计为ASCII的严格超集。您可能必须使用转换API(特别是在Windows上,出于某种奇怪的原因,它是UTF-16),但至少它是一致的。

        2
  •  1
  •   Brian R. Bondy    17 年前

    t

        3
  •  0
  •   maccullt    17 年前

    Unicode字符集+对数据最有意义的编码。我通常使用UTF-8,因为它对传统的C/C++函数很方便,而且我处理的数据不会造成太多的膨胀。

    一些API(Windows)和跨语言工具(Java)使用UTF-16,因此这可能是一个考虑因素。

    icu strings 需要 这样做,而不是天真地到处做。不必要的对话会降低我们的性能,尤其是当与也使用“超级”字符串的XML DOM库结合使用时。