5

私はたくさん検索しましたが、何も見つかりませんでした:

unsigned int unicodeChar = 0x5e9;
unsigned int utf8Char;
uni2utf8(unicodeChar, utf8Char);
assert(utf8Char == 0xd7a9);

uni2utf8に似たものを実装するライブラリ (できればブースト) はありますか?

4

4 に答える 4

15

Unicode 変換は C++11 の一部です。

#include <codecvt>
#include <locale>
#include <string>
#include <cassert>

int main() {
  std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert;
  std::string utf8 = convert.to_bytes(0x5e9);
  assert(utf8.length() == 2);
  assert(utf8[0] == '\xD7');
  assert(utf8[1] == '\xA9');
}
于 2012-07-22T19:59:27.973 に答える
10

Boost.Locale には、エンコード変換用の関数もあります。

#include <boost/locale.hpp>

int main() {
  unsigned int point = 0x5e9;
  std::string utf8 = boost::locale::conv::utf_to_utf<char>(&point, &point + 1);
  assert(utf8.length() == 2);
  assert(utf8[0] == '\xD7');
  assert(utf8[1] == '\xA9');
}
于 2012-07-22T20:18:31.577 に答える
4

UTF8-CPP ライブラリを試してみてください。Unicode 文字をエンコードすると、次のようになります。

std::wstring unicodeChar(L"\u05e9");
std::string utf8Char;
encode_utf8(unicodeChar, utf8Char);

std::stringここでは、UTF-8 バイトのコンテナーとしてのみ使用されます。

于 2012-07-22T19:46:06.577 に答える
-3

sprintfを使用します。(:

cstring = sprintf("%S", unicodestring);

于 2012-07-22T20:04:22.913 に答える