utility.py のパッチを作りました
COREBlog
excerpt に文字化けが発生するのでパッチ作りました。
文字列を指定された長さで切り出すモジュールが UTF-8 に対応していないようです。Shift_JIS もついでにコードを修正しました。
ここに修正したソースとパッチ置いてみました。
UTF-8 は今のところうまく動作しているようですが、Shift_JIS の方は単体でしか試験していません。環境のある方に試していただけると助かります。
さて、初めて Trackback 使ってみよう。ドキドキ
補足:これは元々 kiyo さんが発見して BBSに投稿してくれた問題です。
拝見しました(ざっとですが)
UTF-8を任意文字数で切り詰める処理,ちゃんと動かないのは認識しているのですが,そのままになっている部分です
Pythonの場合,Unicode Stringにすればスライスを使うとちゃんとマルチバイトの境目をまたがない形で処理してくれるので,そのようにするのが正しいのではないかと思っています
EUC-JPやS-JISのマルチバイト文字列と,Unicode文字列をlenなどで比べてみると分かります
わざわざありがとうございます。ほとんど C 言語なので恥ずかしい限りです。本当は Python らしく書きたかったのですが。
s = unicode('あいう',"japanese.euc-jp").encode('utf-8')
print len(s)
print len(s[:1])
print len(s[:2])
...
などと試してみましたが、9, 1, 2,... と出力されてしまいました。メソッド等探したり、コーディングの文字コード自体を変更したりしてみましたが、うまくスライスできる機能が見付かりませんでした。
良い機会なので、ちと勉強してみようと思っています。
続きです(恥;;
>>> u=unicode(s,'utf-8')
>>> len(u)
3
>>> u[0]
u'\u3042'
>>> type(s)
<type 'string'>
>>> type(u)
<type 'unicode'>
などということがようやく解かりました。encode() と unicode() の区別もついていませんでした。
【注意】TrackBack 送信なさる場合、
あなたの記事中に参照リンク (当ブログの URL 記述) が必要です。
トラックバックスパム防止のため、御了承ください。
There is no trackback.