mecabがC++で文字化けするという件

久しぶりの日記〜。

なにやらdaisuke makiがC++でmecabと戯れている模様。makiさん曰く、C++mecab使うと文字化けするよ〜、とのこと。

自分もC++勉強中につき、ちょっとだけ触ってみよっと。
さっそく本家サイトのサンプルから必要そうなところを抜粋。

test.cpp

#include <iostream>
#include <mecab.h>

using namespace std;

#define CHECK(eval) if (! eval) { \
    const char *e = tagger ? tagger->what() : MeCab::getTaggerError(); \
    std::cerr << "Exception:" << e << std::endl; \
    delete tagger; \
    return -1; }

int main (int argc, char **argv) {

    char input[1024] = "酒は飲んでも飲まれるな わかっちゃいるけどやめられない byたけし";
    MeCab::Tagger *tagger = MeCab::createTagger (argc, argv);
    CHECK(tagger);
    const char *result = tagger->parse(input, strlen(input));
    CHECK(result);
    std::cout << "INPUT: " << input << std::endl;
    std::cout << "RESULT: \n" << result << std::endl;

    delete tagger;

    return 0;
}

コンパイルはこう。

cc -O2 `mecab-config --cflags` test.cpp -o test `mecab-config --libs` 

結果はこう。

INPUT: 酒は飲んでも飲まれるな わかっちゃいるけどやめられない byたけし
RESULT: 
酒      名詞,一般,*,*,*,*,酒,サケ,サケ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
飲ん    動詞,自立,*,*,五段・マ行,連用タ接続,飲む,ノン,ノン
で      助詞,接続助詞,*,*,*,*,で,デ,デ
も      助詞,係助詞,*,*,*,*,も,モ,モ
飲ま    動詞,自立,*,*,五段・マ行,未然形,飲む,ノマ,ノマ
れる    動詞,接尾,*,*,一段,基本形,れる,レル,レル
な      助詞,終助詞,*,*,*,*,な,ナ,ナ
わかっ  動詞,自立,*,*,五段・ラ行,連用タ接続,わかる,ワカッ,ワカッ
ちゃ    助詞,接続助詞,*,*,*,*,ちゃ,チャ,チャ
いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
けど    助詞,接続助詞,*,*,*,*,けど,ケド,ケド
やめ    動詞,自立,*,*,一段,未然形,やめる,ヤメ,ヤメ
られ    動詞,接尾,*,*,一段,未然形,られる,ラレ,ラレ
ない    助動詞,*,*,*,特殊・ナイ,基本形,ない,ナイ,ナイ
by      名詞,固有名詞,組織,*,*,*,*
たけし  名詞,固有名詞,人名,名,*,*,たけし,タケシ,タケシ
EOS

あれ?サンプルに書いてあるとおりに普通にやってみて、普通に結果がでてくるお。


maki先生、文字化けなんかしていませんぜ?何かのお間違いじゃーございやせんか?


あ、そうそう、環境はRedhat ES4。UTFな環境です。

なんか参考になるかな?