Forums: Help (Thread #2986)

2.1.3でencodeの失敗のエラー (2003-07-18 22:11 by tomoki #5325)

FreeBSD-4.8のpython-2.2.3だとlocale.nl_langinfo(locale.CODESET)
でeucJPがかえるので、 codeselect.get_terminal_encoding()をencodingにつかっているところで動かなくなります。
とりあえず、えいやと

def get_terminal_encoding():
enc = locale.nl_langinfo(locale.CODESET)
if enc == 'eucJP':
enc = 'EUC-JP'
if enc == 'SJIS':
enc = 'Shift_JIS'
return enc

こうしてみましたがどうしたもんでしょう。
#ただ、これをなおしてもさらに

File "/usr/local/lib/ninix/ninix/dll/kawari.py", line 330, in get_event_response
value = u'%s' % ref[i]
UnicodeError: UTF-8 decoding error: unexpected code byte

こんな感じでとまってしまいますが。

RE: 2.1.3でencodeの失敗のエラー (2003-07-19 13:28 by (del#4714) #5340)

こちらでは

>>> unicode('日本語', 'eucJP')

はきちんと動作します.
実際のエラーメッセージを示していただけませんか.

もうひとつの方は2.1.4で修正済みです.
Reply to #5325

RE: 2.1.3でencodeの失敗のエラー (2003-07-19 23:25 by tomoki #5343)

> 実際のエラーメッセージを示していただけませんか.
以下のようになります。

ghost:
Traceback (most recent call last):
File "/usr/local/lib/ninix/ninix/ninix", line 1707, in ?
main()
File "/usr/local/lib/ninix/ninix/ninix", line 166, in main
print "ghost:", desc.get("name", "<none>").encode(encoding, 'ignore')
LookupError: unknown encoding: eucJP

とりあえず、Japanese Codecsのエンコーディング名のエイリアスを追加してもつかえるようになりました。けど、そういうもんなんでしょうか(nl_langinfo(CODESET)をencodingだとおもっていいの?)。
#(ほかにいい方法がないから)そういうもんなのかもしれない。

>もうひとつの方は2.1.4で修正済みです.

ご苦労さまです。うごくようになりました。
#なんか、.ninix/socket/ghost.dbがのこっててうごかないという現象がおこりはしましたが、これは多分なんかわたしのミスでしょう。
Reply to #5325

RE: 2.1.3でencodeの失敗のエラー (2003-07-20 09:22 by tomoki #5345)

梶山さんのJapaneseCodecs(http://www.python.jp/Zope/download/JapaneseCodecs)ではなくてiconvcodecs(http://sourceforge.net/projects/koco/)をつかえばいじらなくてもいいようですね。
これをつかっとくのが正解でしょうか。変換やエンコーディング名がGNU iconvにおしつけられてlinux(の他のアプリ)互換ぽくなるので。

#ごめんなさい。なんかへんな風にフォローをつけてますね。
Reply to #5343

RE: 2.1.3でencodeの失敗のエラー (2003-07-20 18:15 by (del#4714) #5352)

codeselct.pyは過渡的な実装のつもりなのであまり深くは考えていません. ですのでこうした方が良いというアイデアがあれば出してくださると有難いです.
# 多言語の混在を許している以上, 将来的にはターミナル出力もutf-8にすることになるかと思います. もしくは専用のウインドウに出すようにするぐらいしか思い付かないといったところです.

> #なんか、.ninix/socket/ghost.dbがのこっててうごかないという現象がおこりはしましたが、これは多分なんかわたしのミスでしょう。

リリースメモに書き忘れてましたが. ghost.dbの文字コードが変わったため古い中身が残っているとエラーになります.
# ninix-ayaが落ちたりしない限りは中身は残らないので忘れてました.
Reply to #5343

RE: 2.1.3でencodeの失敗のエラー (2003-07-21 18:08 by tomoki #5357)

>codeselct.pyは過渡的な実装のつもりなのであまり深くは考えていません. ですのでこうした方が良いというアイデアがあれば出してくださると有難いです.

nl_langinfo(CODESET)をつかうしかないのなら、適当なcodecsをつかってねということでよいとおもいます。readmeにかいてあるとうれしいです。
UTF-8でだすならそうしてしまった方がいさぎよいかもしれません。LANGになにを設定してても、端末エミュレータなどがその言語を表示できるとはかぎりませんし。
あるいは出力エンコーディングはオプションで指定できるようにする、でしょうか(あまりうれしいひとはいないような気もします)。

Reply to #5352