スポンサーリンク

ICUライブラリ(再)

以前やったのが2014年とかだったので更新する。

古い記事:

1.ダウンロード

https://icu.unicode.org/download

公式サイトからICU4C系をクリックする。

ICU4CはC++。

ICU4JはJava。

その先のページの一番下のDownloadにある、Source and binary downloads are available on the git/GitHub tag pageのリンクへ飛ぶ。

一覧の中から、対応開発環境のものを選ぶ

2.サンプルコード

リンクにicuuc.libが必要。また実行時にicudt69.dll , icuuc69.dllが必要。

#include <fstream>


#include <unicode/ucnv.h>

// icu::UnicodeString に必要
#include <unicode/unistr.h>

// 要リンク
#pragma comment(lib, "icuuc.lib")

// 以下のdllを要求される
// icudt69.dll
// icuuc69.dll

void Converter() {

  std::fstream r("C:\\dev\\icu-test\\shiftjis.txt");
  std::string src_data;
  r >> src_data;
  //エラーを受け取る変数
  UErrorCode err = U_ZERO_ERROR;

  //入力・出力の各文字コード
  char srcCode[] = "shift-jis";
  char dstCode[] = "euc-jp";

  //UnicodeStringに渡す文字列の文字コードを指定する
  UConverter* srccnv = ucnv_open(srcCode, &err);

  //入力された文字の文字コードを内部形式に変換
  icu::UnicodeString srcstr(src_data.c_str(), src_data.length(), srccnv, err);

  //内部形式の文字コードを目的の文字コードへ変換
  char* dst_data = new char[100];
  srcstr.extract(0, srcstr.length(), dst_data, dstCode);
  using namespace std;
  std::fstream w("C:\\dev\\icu-test\\euc-jp.txt", ios::out | ios::binary | ios::trunc);
  w << dst_data;
}

int main()
{
  Converter();
}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: