Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。
![pythonのchardetにて文字コード判別がNoneになる。](https://cdn-ak-scissors.b.st-hatena.com/image/square/d61d99447f3434c475f38686e3fcb4f6ab93528f/height=288;version=1;width=512/https%3A%2F%2Fteratail.com%2Fimg%2FogpImages%2FimgFacebookShare.png)
Windows 上の Python (Python3) で open() 関数を使ったときに出る UnicodeDecodeError (ex: UnicodeDecodeError: 'cp932' codec can't decode byte 0x** in position **: illegal multibyte sequence) といえば、Python が標準でファイルの文字エンコーディングをかの悪名高い Shift-JIS (CP932) として読み込んでしまうことが原因であることはそれなりに知られているかと思います。 このエラー、自分で書いたコードなら全ての open() 関数の引数に encoding='utf-8' を追加してあげれば回避できますが、使おうとしたライブラリからそのエラーが出る場合はこちら側から制御できないので絶望するしかありません。 この記事 いわく
Python 【Python】encode・decodeメソッドで、文字列⇔文字コードをかんたん変換!(UTF-8・Shift_JIS) Pythonを使っていると、文字コードや文字列の変換が必要になることがありますよね。 でも、文字コードって何?どうやって変換すればいいの?と疑問に思ったことはありませんか? やり方はかんたんです。 「encode」メソッドと「decode」メソッドを使えば、あっという間に文字列と文字コードの変換ができるようになります! UTF-8、ASCII、Shift_JISといった代表的な文字コードの変換プログラムもまじえて解説しています。 実際にプログラムを動かすことで、どのように文字列と文字コードを変換するのか理解が深まると思います。ぜひ実際にコードを入力して動かしてみて下さいね。
先日、ビジネスパーソン向けの Python 本を執筆したことを書きました。 t2y.hatenablog.jp 本稿では本書のことを「できるPy」と呼びます。 Amazon でいくつかカスタマーレビューもいただいて次のコメントをみつけました。 python3.7 対応ということで、pathlib を使ってる点が(古いpython は切り捨てる!的なところは)潔いと言えば潔いし、日本語のファイル名にも気を配っている記述はオライリーに期待するのは酷なところもある。でもこの本でもNFD問題は全くの記述無し。だめだろ、それじゃ。 Amazon CAPTCHA まさに仰る通りです。執筆時にそのことに気づかずご指摘いただいてありがとうございます。 ここでご指摘されている NFD 問題というのは、ファイル名のみに限った問題ではなく、Unicode の文字集合を扱ってエンコード/デコードするときに発生する
マルチバイト文字の含まれたテキストファイルを扱おうとすると、文字コードがまず問題になる。 そのファイルがいったい何でエンコードされているか分からないと、それを適切に扱うことは到底できない。 そんなとき使うと便利なのが、今回紹介する chardet というサードパーティ製のパッケージ。 今回の検証環境には Mac OS X を使った。 $ sw_vers ProductName: Mac OS X ProductVersion: 10.11.1 BuildVersion: 15B42 インストール まずは pip を使って chardet をインストールする。 $ pip install chardet 下準備 次に、文字コードを検出するのに使うテキストファイルを用意しよう。 $ cat << EOF > helloworld.txt こんにちは、世界 EOF 上記のコマンドで作ったテキスト
次のコードでhtmlを取得しましたが、 import urllib2 fp = urllib2.urlopen('http://2689.web.fc2.com/1989/GS/GS1.html') html = fp.read() fp.close() 次のように文字化けしてしまいます。 出力結果(一部) <div class='score'> <p class='data-ce'><span>4??8???@1???@?????h?[???@56,000?l</span></p> <div class='float-clear'></div> <table border='1' cellspacing='2' class='board1'> どのようにしたら、文字化けを直せるでしょうか?教えてください、お願いします。
日本語サイトのスクレイピング等でマルチバイト文字を含んだバイナリ文字列データを扱う場合、デコードのために文字コード(正確にはエンコーディングですが)が何なのかを事前に把握する必要がなります。ですが、Webサイト等ではそれがわからない場合も往々にしてあります。そんなとき便利なのが今回学習するchardetという文字コード判定ライブラリです。 インストール pipでインストールできます。 pip install chardet 基本的な使い方 detectメソッドにバイナリ文字列データを指定します。以下のサンプルでは、yahooのサイトの文字コードを判定しています。webサイトのデータ取得はurllibモジュールを使用しています。 import chardet from urllib.request import urlopen r = urlopen('http://yahoo.co.jp/
この投稿は 「python Advent Calendar 2017 - Qiita」 の 9日目の記事です。 こんにちは、akiyoko です。 「Python Advent Calendar」は 4年連続 4度目の参加になります。 *1, *2, *3 はじめに 皆さん、CSV は好きですよね? Excel も大好きですね? じゃあ当然、CSVファイルは Excel で開きますよね。 文字化けは? ・・もちろん嫌いですよね。 でも CSVファイルを Excel で開こうとしたときに、こんな文字化け地獄を経験したことはありませんでしたか? *4 ということで今回は、Excel で直接開いたときに文字化けしない CSV ファイルを Python3 で作成する方法 を紹介したいと思います。(おまけで Python2 でのやり方も書いておきますが、今時 Python2 で消耗している人なんてい
※2017/11/07追記: こちらはPython2に関する記事です。Python3の場合このエラーに悩まされることはありません。 以下のエラーと戦った話。 UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) 結論だけ言うと、 str型とunicode型を混ぜるな!っていう話。 scikit-learnを使って文章をクラスタリング 今回は、以下の記事を参考にして、ある配列を中身のテキストでクラスタリングしようとして起こった。 http://blog.parosky.net/archives/2212 この記事のanalyzer(文章を単語の配列に区切る関数)を自作して、 #feature extractionの部分まで書いたのがこれ これでテストを
はじめに この文書は、 Steven Bird, Ewan Klein, Edward Loper 著 萩原 正人、中山 敬広、水野 貴明 訳 『入門 自然言語処理』 O'Reilly Japan, 2010. の第12章「Python による日本語自然言語処理」を、原書 Natural Language Processing with Python と同じ Creative Commons Attribution Noncommercial No Derivative Works 3.0 US License の下で公開するものです。 原書では主に英語を対象とした自然言語処理を取り扱っています。内容や考え方の多くは言語に依存しないものではありますが、単語の分かち書きをしない点や統語構造等の違いから、日本語を対象とする場合、いくつか気をつけなければいけない点があります。日本語を扱う場合にも
Pythonにはじめて触って、いつのまにか1年が過ぎたのですが、一番はまったのは、やっぱりunicodeの扱いだったと思います。 特に、 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in range(128) のようなエラーにはさんざん悩まされました。ここがたとえばrubyなど他の言語と比べてわかりにくいために、Pythonが取っつきにくい言語になっているのではないか、と個人的には思います。 そこで、このエラーに関係するはまりどころとTipsをいくつか列挙してみました。これからPythonに触れられる方の参考になればと思います。 なお、環境はUNIX上のPython 2.4, 2.5を想定しています。 u1はunicode型で、s1はstr型です。s1にどのよ
Pythonは便利ですが、日本語の取り扱いになると突然面倒になる。 Traceback (most recent call last): File "<stdin>", line 1, in ? UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128) ってなエラーが出る度に日本語圏に生まれたことを呪う…とまではいかないけど、結構いらいらする。 PythonのUnicodeEncodeErrorを知る - HDEラボ http://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html を参考に、忘備録的に記録します。 上記サイト様によれば、最初のエラーは、 str型を文字コード'ascii'でデコードして
[Home] [Setting up Mac OS X] [Python]: [ファイルを読む] 日本語を使う Pythonで日本語を使う Python 2.4以降では、標準で日本語を扱うことができます。 PythonのソースコードをUTF-8で書くには 日本語を扱うPythonのスクリプトの中では、UTF-8の文字コードを使うのが 楽です。 Mac OS Xのターミナルで日本語を扱う場合は、 ここの「4. Terminalの設定を変える」の 指示に従ってください。 以下、ソースコードの簡単な例を示します。 #!/usr/bin/env python # -*- coding: utf-8 -*- import re jtext = u'子猫が隠れんぼをしています' print 'jtext has', len(jtext), 'Japanese characters.' if re.se
はじめに このページでは,Python 2.7系における日本語処理について記述する. Python 3.x系については当てはまらないことが多いので,注意が必要である. 使える文字コード Pythonでは,日本語は次のような文字コードを使って扱うことができる.プラットフォームによって使う文字コードが違う. UTF-8 (utf_8)…Unicodeの文字符号化の一つ.OS X環境の日本語の文字コード. Shift-JIS (shift_jis)…パソコンで用いられていた日本語の文字コード. ISO-2022-JP (iso2022_jp)…電子メールの送受信に用いられる日本語の文字コード. EUC-JP (euc_jp)…Unix環境で用いられていた日本語の文字コード. Code Page 932 (cp932)…Windows環境の日本語の文字コード.Shift-JISの一つのバリエーショ
大学の友人が Python を学び始め、デバッグしていて抱いた疑問をググったところ、以下の解決方法を見つけたようです。 #python で日本語を含むlistとかdictとかを人間が読めるようにprettyprintする方法はURLが王道なのだろうか。 2011-03-04 21:50:02 via web Pythonでコード書いてると、1回は残念だなぁと思うポイントとして表題の件があると思います。具体的には以下です。 # リストも辞書も出力がお世辞にも良いとは言えない。。 >>> print ['あ', 'い', 'う'] ['\xe3\x81\x82', '\xe3\x81\x84', '\xe3\x81\x86'] >>> print {'title':'ねじまき鳥', 'author':'村上春樹'} {'author': '\xe6\x9d\x91\xe4\xb8\x8a\xe
Pythonのインタラクティブシェルはとても便利なんですが、リストやタプルなどのシーケンスの要素が日本語の場合、そのまま表示できません。 >>> lst = [u'あ', u'い', u'う', u'え', u'お'] >>> lst [u'\u3042', u'\u3044', u'\u3046', u'\u3048', u'\u304a'] これを日本語で表示するには、通常for文を用いて各要素をprintします。 >>> for i in lst: ... print i, ... あ い う え お ここで、次のような書き方をすると、for文を使わなくてもリスト内の日本語が表示できます。 >>> print str(lst).decode("unicode-escape") [u'あ', u'い', u'う', u'え', u'お'] str()をrepr()にしても動作します。
Pythonで日本語を使う 主にPython 2.xについての話題です。 ソースの書き方編 ソースコードの1行目か2行目でソースコード自体の文字コードを指定する。 # coding: utf-8 # coding: cp932 # coding: euc-jp emacsenなどとの互換性を考慮して以下のようにしてもよい。 # -*- coding: cp932 -*- なお cp932 は Windows の機種依存文字を含む Shift_JIS のことである。それから以上のコメントは純粋にソースコードの文字コードを指定するだけであって、他の部分(入出力など)には一切の影響を及ぼさない。 複数の環境で動かすスクリプトの文字列は、次のように u を使って書く。 s = u"日本語" 文字コードの変換を行う場合は errors 引数を指定し、変換できない文字が見つかった場合の処理を明示する。
HOME > 電算 > Python と文字コード Python と文字コード Python で行き当たりばったりに日本語処理をしてきたが、これではいかんと思っていくらかまとめてみた。(当然、このメモには間違いや誤解があろうと思う) 「python は『abc』を使うのが基本で『あいう』を使うのが例外だ」と考えると、「あいう」に対してできないことが多すぎて難しく見える。しかし、「『あいう』に対して使えるようなやり方なら『abc』にも問題なく使えて、ただ、『abc』には特権的に無作法な書き方が許されているのだ」と考えれば、ずっと簡単に理解できるように思う。 まとめ ユニコードは「文字コード」(バイト表現と文字の対応関係)ではない utf-8 は「文字コード」である Python の unicode 型は「文字コード」にとらわれない型で、CPU やメモリ上で用いられる Python の str
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く