【问题标题】:Easiest Way to Transform a Wide String or Wide Character Array to a Simple Character Array?将宽字符串或宽字符数组转换为简单字符数组的最简单方法?
【发布时间】:2012-09-16 05:14:44
【问题描述】:

我的变量在一个宽字符串的特定内部实现中,但我可以很容易地将它变成一个宽字符数组。问题是我需要将它提供给只接受字符数组的库函数。

所以我最终得到了这样的结果:

wchar_t* wstr;

// char* str = "need some processing here";

function(str);

那么,有没有一种简单的方法,或者我应该逐个字符地手动完成?

【问题讨论】:

  • 这取决于您尝试对结果做什么以及原始内容包含什么。如果您只想处理 ASCII 字符,则需要 std::ctype<whar_t>::narrow()。如果函数需要多字节编码,则需要 wcstombs() 之类的东西。请注意,后者通常不被视为字符,而是字节序列。
  • 这似乎对我有用,尽管我找到了一个不需要这种转换的更好的问题解决方案。不过还是谢谢啦。

标签: c++ arrays widestring character-arrays


【解决方案1】:

char* 可能意味着很多事情。如果采用 char* 的函数实际上采用 UTF8,则有办法将 UTF16 或 UTF32 转换为 UTF8。 wchar_t 通常用于存储 UTF16 (windows) 或 UTF32 (macosx) 以及其他编码。

在这里查看 ConvertUTF.c/.h

unicode.org code

【讨论】:

  • 我怎么知道它是否需要UTF-8?
  • 简单地说,UTF8 是编码字符数组以表示大多数语言的大多数字符/字母/符号/等的众多方法之一。它可能是最受欢迎的。如果您正在调用某个库定义的函数,请查看文档以查看它期望的 char* 类型。许多流行的 API 期望 char* 为 UTF8。如果您知道您的 wchar_t 输入只会是英文字符(ascii 代码 32 到 127),那么您可以使用上述库将 wchar_t 转换为 char*,因为这些字符在所有 char* 编码方案中都有效。
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 2014-03-05
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2016-01-16
相关资源
最近更新 更多