ブログ パスワード認証 閲覧するには管理人が設定した パスワードの入力が必要です。 管理人からのメッセージ https://mac-tegaki.comへ移転中 閲覧パスワード Copyright © since 1999 FC2 inc. All Rights Reserved.
ブログ パスワード認証 閲覧するには管理人が設定した パスワードの入力が必要です。 管理人からのメッセージ https://mac-tegaki.comへ移転中 閲覧パスワード Copyright © since 1999 FC2 inc. All Rights Reserved.
2008.05.25 Python でエンコーディングを判定する (1) テーマ:プログラミング言語 Python を使う(336) カテゴリ:Python Python でエンコーディングの自動判定をするにはいくつかの方法がある。文字列のコードを直接調べてその情報だけで判定するタイプと、HTML や XML ファイルに含まれるメタ情報なども利用し、そうした情報で判定できないものは文字コードの情報から判定するタイプがある。 前者のタイプでは、pykf や、nkfpython、kanjilib などがある。pykf は、ShiftJIS, EUC-JP, JISコードを相互に変換するためのPython拡張モジュールで、Universal Encoding Detector や encutils のようには、メタ情報を使わない直接文字コードをチェックするタイプ。日本語のみを前提とするのであれば
何故かあたり前にならない文字エンコーディングバリデーション | yohgaki's blog ってあるように、いまいち文字コードの不正な判定による危険性ってのが分かってない。 SJISの問題は、(2/3)SQLインジェクションを根絶!セキュア開発の極意 - 第5回■注目される文字コードのセキュリティ問題:ITproの記事がわかりやすかった。 というか、やっぱりPHP使ってると誰でも一度は「なんじゃこの『¥』は?」って思うもんなんで。 なるほど、確かに↓の図のように「あるバイト」が2つの意味を持つっていう文字コード形態はやばいんだなと。 EUC-JPはそんなことはしないで、1つのバイトには1つの意味しか取らせない。 だけど、これでも文字化けが起こることがある。経験的には、「マルチバイトをXX文字で切り落としたい」とかやった場合。ちゃんと文字コードを判定してくれるPHPでいえばmb_subst
windows+python2.5で バイナリファイルからSJISの文字列を読み取ってutf8文字列としてsqliteに保存。後でsqliteから読み出してSJISで保存。ってことをpythonでやろうとして大いに躓く。一応理解したものの、どうにも把握しづらいのでまとめてテストコードを晒してみる # -*- coding: utf-8 -*- # vim:fileencoding=utf-8 #バイトコード j = '日本語' #unicode文字列 uj = u'日本語' #9'バイト' print len(j) #3'文字' print len(uj) #unicode文字列なので、pythonが自動的にstdoutに適合するよう変換する print uj #utf8のバイトコードをunicodeに変換して出力 print unicode(j,'utf-8') #上と同じだがdec
わたし的棚ぼた一万円選書 急に千葉さんに手渡された封筒、開けてみたら1万円札が1枚。何ごとかと思えば、同期の出張を代わったお礼をもらったらしい。 「葵はワンオペで育児してくれたから」と半分わけてくれました。 泡銭の1万円 これはもう、わたし的1万円選書をしろという思し召しなのでは……
日本語が化けて大変苦労したのでメモ。結論として、XML(またはHTML)を解析する前にunicode関数に通しておく、ということで良いのかな?相変わらず文字コード関連はよく分からない。 from urllib import urlopen from lxml import etree html = urlopen("http://b.hatena.ne.jp") charset = html.headers.getparam('charset') html_data = unicode(html.read(),charset) et = etree.fromstring(html_data, parser=etree.HTMLParser()) title_element = et.xpath("./head/title")[0] title = title_element.text.e
上記はキャリアが対応を発表している文字エンコードであり、機種によっては公式に発表している文字エンコード以外にも対応している場合もあります。上記の表から、携帯サイトで共通に使える文字エンコードは「Shift_JIS」であることがわかります。このことから携帯サイトでは基本的に「Shift_JIS」を使って画面の入出力を行うことになります。ちなみにSoftBankの3GC型などの端末では、「Shift_JIS、EUC-JP、ISO-2022、UTF-8」のそれぞれに対応していますが、「EUC-JP、ISO-2022」はキャリアのゲートウェイを通過するときに「Shift_JIS」に自動的に変換されてきます。そのため出力はできますが取り扱いはShift_JISとなるため、SoftBankのみの携帯サイトの場合はShift_JISかUTF-8に絞って対応するとよいでしょう。 絵文字を考慮に入れた文
■ Zend Framework で出力文字エンコーディングを変更する 携帯に対応するために、HTTP 出力をシフト JIS に変換したいと思ったので、 Zend Framework ではどうやればいいのか調べてみました。 マニュアルにはほとんど説明が書かれていないのですが、 Zend_View には Zend_View_Filter という output filter の機能が実装されているので、これを利用します。 まず、実際の処理を行う Sjis.php というこんなファイルを作り、 Revulo/View/Filter のようなディレクトリに配置します。 <?php class Revulo_View_Filter_Sjis { public function filter($value) { header('Content-Type: text/html; charset=Shif
Pythonは使いやすい覚えやすい気持ちいいとまで言う人もいる。たしかにその通りだと思った。しかし、日本語を使おうとした時に急に気持ち良くなくなる。そう感じたのは僕だけではないはずだ。 ということで今日の日記のネタはPythonと日本語となりました。 (WindowsXPにココから "Python 2.5.1 Windows installer" をインストールした環境でテストしています。) まずは、あなたが書いたコードはutf-8で保存する。そして、そのコードの先頭には以下を記入する。 # -*- coding: utf-8 -*- あなたはエディタに何を使っていますか? 秀丸、メモ帳、vim、meadow、或いは Python Scripter、eclipse ? いずれにしてもファイルを保存する時のエンコードはutf-8にすべし。 では早速気持ちよくない(表示が文字化けする!)例。
#right(){(&counter())} *MacでのUTF-8-MAC問題を解決する方法 このページでは、MacでSubversionを使用するときにぶち当たる問題「[[UTF-8-MAC問題>http://www.google.com/search?client=safari&rls=ja-jp&q=UTF-8-MAC%E5%95%8F%E9%A1%8C&ie=UTF-8&oe=UTF-8]]」を解決する方法について記します。 |BGCOLOR(lightgray):&bold(){NEWS!!} 2009/04/27| |hayatoさんのコメントによると、この問題に対処するパッチが、ついに[[MacPortsでのvariantとして取り込まれた>http://d.hatena.ne.jp/fujisan3776/20081231/1230700127]]とのことです!&br()
いつも使う時わけわからなくなるのでメモ(´・ω・`) Pythonの対話モードでencodeとdecode 使ってみる。 ユニコード -> 'utf8' >>> u'牛タン'.encode('utf8') '\xe7\x89\x9b\xe3\x82\xbf\xe3\x83\xb3' >>> print '\xe7\x89\x9b\xe3\x82\xbf\xe3\x83\xb3' 牛タン 'utf8' ー> ユニコード >>> '\xe7\x89\x9b\xe3\x82\xbf\xe3\x83\xb3'.decode('utf8') u'\u725b\u30bf\u30f3' >>> '牛タン'.decode('utf8') u'\u725b\u30bf\u30f3' >>> print u'\u725b\u30bf\u30f3' 牛タン >>> unicode('牛タン', 'utf8')
odz buffer: Pythonのエンコーディング (http://d.hatena.ne.jp/odz/20080106/1199638622) 入出力周りのエンコーディングの設定の方法が書かれていた。この例で、エンコーディングを取得する前半と入出力のエンコーディングを設定する後半に分けて考える。 import sys, locale, codecs enc = locale.getpreferredencoding() sys.stdout = codecs.getwriter(enc)(sys.stdout) sys.stdin = codecs.getreader(enc)(sys.stdin) 『Pythonチュートリアル』には以下のコードが載っていた。 import codecs, sys sys.stdout = codecs.lookup('utf-8')[-1](sy
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にどのよ
¨ ISO 646 に従う各種の文字集合の異同。 シフト JIS では表現できない文字は ISO 8879 の実体参照を用いたが うまく見えない場合には文字集合名称のところからリンクしておいた 京大の安岡さんの文字表を参照されたい。 しかし同じ符号位置を国ごとに別の文字に割り当てていると 情報交換が国内で閉じているうちは問題ないが、 何も考えないで国際的に情報交換すると 米国で「#」のはずが英国では「£」に、 「\」のはずが日本では「¥」に化けてしまう といった問題が発生する。 7ビットの空間を使いながらこの問題を解決するためには 文書のなかで文字集合を切り替える必要がある (これは後述する ISO 2022 の符号化によって可能) が、 必要な文字数が 256 以下ならば、 切り替えが不要になるので 8ビットの空間をそのまま用いることができる。 ISO 6429 ASCII の制御文字に
この講座では,様々な角度から文字コードの仕組みを解き明かしていきます。文字コードとは,文字を表すコード(本来数値でない情報を数値で表したもの)のことです。皆さんは,Webブラウザで表示した画面が文字化け(意味不明の文字が表示されること)した,という経験があるでしょう。文字化けは,Webブラウザ側で設定した文字コードと,Webページのファイルの文字コードの種類が違う場合に起こります。 第1回 文字化けが発生する原因と対策 第2回 文字コードの元祖ASCIIをマスターしよう 第3回 漢字を表す文字コードは一種類だけじゃない 第4回 プログラマにとっての文字コード 第5回 フリー・ソフトを活用しよう
「その1」のまとめ ⇒Python で日本語を扱う基本をまとめてみるメモ(その1) - 猫(=・ω・=)顔 1.0β 1行めか2行めで # coding: 〜 を指定する。 '' は通常の文字列。保存した形式のままの「バイト列」。 u'' は Unicode 文字列。多バイト文字環境で1文字を1文字として扱うために必要。 通常の文字列から Unicode 文字列への変換は unicode() 関数を使う。 今日のお題 unicode() 関数をもうちょっと探る Unicode 文字列を作る別の方法 文字コードの変換方法 (1) Unicode 文字列から任意の encoding へ 文字コードの変換方法 (2) encoding-A から encoding-B へ unicode() 関数をもうちょっと探る 前回のおさらい。 以下、通常の文字列(バイト列)は、メンドクサイから全部 euc-
プロジェクトに多人数が参加するようになると、なぜかプロジェクトの標準とは異なる文字エンコーディングのファイルがcommitされていることがあります。UTF-8で統一しているはずなのにShift_JISのファイルがある、なんて場合ですね。そこでメンバーの注意力不足を指摘したり、「だから***(自分の使っていないエディタの名前を入れてください)はダメなんだ」とかいう宗教論争に発展させたりというのでは不毛ですよね。簡単に気づく方法があればそれでいいんですよ。 方法は色々あると思いますが、今日はどこのご家庭にも必ずあるnkfを使ってみましょう。最近のnkfには--guessというオプションがあり、文字エンコーディングを推測してくれます。 $ nkf --guess hoge*.txt hoge1.txt:EUC-JP (LF) hoge2.txt:UTF-8 (LF) hoge3.txt:B
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く
{{#tags}}- {{label}}
{{/tags}}