nkf for pythonの入れ方と使い方
Webを操作する、ちょっとしたアプリを作る事にしまして、ごそごそしていたら、日本語コード変換したくなりました。
で、日本語コード変換といったら nkf だよなぁ。と思って、ぐぐるとヒット。
- [徳]Python Interface to NKF
http://tokuhirom.dnsalias.org/~tokuhirom/cl/2005-03-14-3.html - TaMa:download : nkfバージョン2用 python インターフェース
http://city.plala.jp/downloaddoc.html - SourceForge.jp: Project Info - nkf Network Kanji Filter
http://sourceforge.jp/projects/nkf/
これを入れると、日本語コード変換を自動的に実施してくれるので非常に便利です。
↓以下に、自分が作ったテストコードをば。
#!/bin/env python # -*- encoding: shift-jis -*- import urllib import nkf def test_http_open(url): print "open:", url try: f = urllib.urlopen(url) print "success!!" body = f.read() t = body t = nkf.nkf("-s", t) print t except IOError: print "### timeout!!" def main(): test_http_open("http://www.python.jp/Zope/") if __name__ == "__main__": ret = main()
上の例では、http://www.python.jp/Zope/ にアクセスして、HTMLを表示しています。
このサイトは、EUCで作成されている為、Windowsで表示させると化けます。
... <td class="xxsmaller" valign="top"> <i><center>Copyright © 2001-2006 Python Japan User's Group.</ce nter><br> <img src="http://www.python.jp/Zope/images/alert.gif" alt="キルケ・ height="15" wid th="15" border="0" />ナ・オ・、・ネ、ホハクス顱ヲイ霖・硑ホ・ウ・鵐ニ・鵐ト、ホテ・賴「、マ。「ウニ・ウ・鵐ニ・鵐ト、 ホコ跑ョシヤ。「、筅キ、ッ、マニ・ワPython・譯シ・カイ颪ヒオ「ツー、キ、゙、ケ。」<br> 、゙、ソ。「ニ・ワPython・譯シ・カイ颪マ・オ・、・ネニ筅ホ・ウ・鵐ニ・鵐ト、ヒツセ、ホ・ラ・綋ー・鬣゚・鵐ークタク・ォ、 鬢ホセ隍・ケ、ィ、鰺カネッ、ケ、・イ、・ホ、「、・スクス、ャツソ。ケ、「、・ウ、ネ、鯒ァ、癸「ヘス、皃ェマヘ、モソス、キセ螟イ、゙、ケ。 」 </i> </td> </tr> </table> </body> </html>
で、nkfに通すと、変換してくれます。
... <td class="xxsmaller" valign="top"> <i><center>Copyright © 2001-2006 Python Japan User's Group.</ce nter><br> <img src="http://www.python.jp/Zope/images/alert.gif" alt="警告" height="15" wid th="15" border="0" />当サイトの文書・画像等のコンテンツの著作権は、各コンテンツ の作成者、もしくは日本Pythonユーザ会に帰属します。<br> また、日本Pythonユーザ会はサイト内のコンテンツに他のプログラミング言語から の乗り換えを誘発する恐れのある表現が多々あることを認め、予めお詫び申し上げます。 </i> </td> </tr> </table> </body> </html>
nkf for pythonを入れる際の注意
nkf for pythonを入れる時、SourceForge.jp: Project Info - nkf Network Kanji Filterからソースコードを入手して下さい。
ソースコードです。バイナリではありません。
READMEに、ちゃんと書いてますが、ここに一人少しばかり悩んだ阿呆がおります。(てへっ
NKFのソースは、nkf for pythonのコンパイルするディレクトリの上位に配置して下さい。
でないと、NKF_python.c の77,78行の読み込みでエラーが起きます。
77: #include "../utf8tbl.c" 78: #include "../nkf.c"
ちゃんと配置すると、インストールが成功します。
$ python setup.py install running install running build running build_ext building 'nkf' extension C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\cl.exe /c /nologo /Ox /MD /W3 /GX /DNDEBUG -IC:\tool2\Python24\include -IC:\tool2\Python24\PC /TcNKF_ python.c /Fobuild\temp.win32-2.4\Release\NKF_python.obj NKF_python.c NKF_python.c(111) : warning C4244: '=' : 'double' から 'long' に変換しました。デ ータが失われているかもしれません。 creating build\lib.win32-2.4 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\tool2\Python24\libs /LIBPATH:C:\tool2\Python24\PCBu ild /EXPORT:initnkf build\temp.win32-2.4\Release\NKF_python.obj /OUT:build\lib.w in32-2.4\nkf.pyd /IMPLIB:build\temp.win32-2.4\Release\nkf.lib -s LINK : warning LNK4044: オプション '/s' は無効です。無視されます。 ライブラリ build\temp.win32-2.4\Release\nkf.lib とオブジェクト build\temp.win 32-2.4\Release\nkf.exp を作成中 running install_lib copying build\lib.win32-2.4\nkf.pyd -> C:\tool2\Python24\Lib\site-packages
最初、NKF.exeを参照するのかと思ってたんですが、そういう訳じゃないです。
NKFのコードを.pydにモジュール化している次第です。