以前やったのが2014年とかだったので更新する。
古い記事:
https://icu.unicode.org/download
公式サイトからICU4C系をクリックする。
ICU4CはC++。
ICU4JはJava。
その先のページの一番下のDownloadにある、Source and binary downloads are available on the git/GitHub tag pageのリンクへ飛ぶ。
一覧の中から、対応開発環境のものを選ぶ
リンクに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(); }