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な環境です。
なんか参考になるかな?