PythonでMeCabを使うと出力が文字化けしてしまいます。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーPythonでMeCabを使うと出力が文字化けしてしまいます。1,082件2一日中詰まっています...アドバイスいただきましたら幸いです。MeCabをUTF8指定でインストールし、anaconda3上のpython3.6.5で使用しようとしています。一通りpathを通し、ラッパーとしてmecab-python-windows0.996をpipインストールしました。MeCabそのものは正常に動いていて、コマンドプロンプトで以下のように入力すると文字化けせずに出力されます。.............一方、pythonのライブラリを使うと以下のように出力されてしまいます。Tagger等の段階ではエラーは出ません。普段テキストデータを扱う際、UTF8では詰まってしまい、utf-8-sigでエンコーディングしているので、そのあたりが問題なのかなと思っていますが、どのように対処すればよいのか検討が付きません...。アドバイスをいただけましたら大変助かります。15:52この記事が参考になるかも。17:21ちなみに最初の紹介記事の手順でインストール・設定すると、記事の様にコマンドプロンプトでは文字化けして、Pyhtonでは正常に表示されます。票3MeCabをSHIFT-JISでインストールした時の現象と酷似しています。コマンドラインやPowerShellから下記のコマンドを実行して、標準で使う辞書の文字コードを確認してください。SHIFT-JISになっている場合は、SHIFT-JISの辞書を読み込んでいることが原因です。UTF-8になっている場合は、私の回答とは原因と対策が異なります。下記のコマンドはUTF-8でインストールした時の辞書を読み込んだ結果を表示しています。SHIFT-JISの場合は、もう一度MeCabをUTF-8で再インストールすると正しく動作する可能性が高いです。※アンインストールは不要です。インストーラから同一フォルダに上書き可能です。既存の辞書と共存させたい場合は辞書フォルダをバックアップしておいてください。C:\...に読み替えてダブルクォーテーションの前にrを付けてください。mecab-ipadic-neologdという強力な辞書を使って(utf8の辞書なので結果的に)文字化け対策することも可能です。Linux)などの導入が必要なので非常に苦労する場合もあります。SHIFT-JIS版を使えないか難しいと思います。parseにsjisを渡そうとしても文字列はUTF-8です。文字列をTaggerでparseすると、sjisを必要とするmecabにUTF-8を渡し、戻ってくるsjisをUTF-8と解釈してエンコードに失敗します。parseにバイト配列を渡すこともSJISファイルを直接読み込ませることもできません。*'出力で\udce3などを表示する理由は、parseの戻り値が不明なsjisの場合超要約すると、PythonがサロゲートコードポイントのうちU+DC80からU+DCFFを私的に流用してるってことのようです。サロゲートペアの下位をencodeするとエラーとなります。allowedSJISファイルに出力を試みてもSJISへのencodeと同一のエラーになります。sequenceデフォルトエンコーディングをSJISに変える方法も3.7では使えません。'setdefaultencoding'Popenからコマンドラインでmecabを呼び出すことはできますが、それでは本末転倒です。以上の試行錯誤の結果から、pythonで形態素解析する場合はMeCabをUTF-8でインストールするかkakashiを使う方が簡単であるという結論に至りました。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。0x83」と表示される。deniedとエラーが出てインストールできません。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。