h1 Python2とPython3での日本語文字列対応について p 毎回、同じようにつまづいて、同じような感じで対応してます。 なので、いいかげん自分に判りやすいようにまとめておきます。 日本語対応といっても、ソースコード中に日本語を書くつもりはありません。 データはYAML形式のファイルで用意。 そして、YAML形式データファイル中の文字列を、UTF-8で日本語に置き換えようとして、 毎回[[ - |「うぅっ」]] 「ぬはぁ」とうなってます。 ---- index ---- p 2: の場合 index 2: ---- p :4 の場合 index :4 ---- p 2:3 の場合 index 2:3 ---- p 2 の場合 index 2 ---- p 3 の場合 index 3 ---- h2 結論 h3 日本語を含む文字列処理で .foramt() や .join() を使いたい p Python2 では日本語を含む文字列は .encode('utf-8')して UTF-8 で保持。 Python3 では日本語の有無に関係なく、素直にstrのままでよし。 (改行を入れてみると) Python2 では日本語を含む文字列は\n .encode('utf-8')して UTF-8 で保持。 Python3\n では日本語の有無に関係なく、\n素直にstrのままでよし。\n ここは改行の直後 h3 日本語を含むUTF-8のテキストを標準入力、標準出力で扱いたい p Python2 では素直に sys.stdin/sys.stdout を read/write。 Python3 では sys.stdin.buffer , sys.stdout.buffer を使う。 Python2 の世界には .buffer は存在しないので [[img|beat.jpg]] 注意。 ---- pre $ cat p2.py #!/usr/bin/env python2 import sys import yaml if __name__ == "__main__": s = sys.stdin.read() d = yaml.load(s) foo = d.get('foo') bar = d.get('bar') d['hoge'] = foo + ' ' + bar d['fuga'] = 'foo={} bar={}'.format(foo, bar) d['guha'] = '(^_^)'.join( d.values() ) s = yaml.dump(d, default_flow_style=False) sys.stdout.write(s) # EOF / ここはデフォルトp p ここは明示的にp [[v2.patch]] バージョン2のための[[ v2.patch | パッチ ]] となります。 [[v2.patch]] と [[v3.patch]] と [[v4.patch]] [[http://kondoh.html.xdomain.jp/ezhtml/index.html | 簡易なHTMLパーサ 2018秋]] これは[[http://kondoh.html.xdomain.jp/p3d/index.html#v3_import | pythonのモジュールのインポート]]について。 pre ここはpre p ここもpre h1 ここもpre / ul [[v2.patch]] [[v3.patch]] [[v2.patch]] [[v3.patch]] [[v2.patch]] [[v3.patch]] [[v2.patch]] [[v3.patch]] バージョン2のための[[ v2.patch | パッチ ]] となります。 これは[[http://kondoh.html.xdomain.jp/p3d/index.html#v3_import | pythonのモジュールのインポート]]について。 [[ img | beat.jpg ]] [[ video | cut.mp4 ]] p ここはp --- ---- ---- ここは暗黙のp h3 ここはh3 --- ---- ---- --- p ここはp [[video|http://kondoh2.html.xdomain.jp/rt/out_v44/fix_1.mp4]] ul 標準入力からYAML形式のテキストを読み込み yaml.load()でテキストをデータに [[-|データの文字列2つを]] ごにょごにょいじって foo + ' ' + bar .format() .join() yaml.dump()でデータを \ YAML形式のテキストにして 標準出力に書き出し 長い文字列「こんちには 世界(^_^)こんちには(^_^)世界(^_^)foo=こんちには bar=世界(^_^)こんちには(^_^)世界(^_^)foo=こんちには」の場合 改行を入れてみると 長い文字列\n「こんちには 世界(^_^)\nこんちには(^_^)\n世界(^_^)\nfoo=こんちには \nbar=世界(^_^)\nこんちには(^_^)\n世界(^_^)\nfoo=こんちには」\nの場合 p dlをためす dl int 整数 float 実数 complex 複素数 p あるいは dl int 整数 割込 float 実数 浮遊 (飲物の中のアイスクリーム?) complex 複素数 劣等感 p table tbl foo|bar|hoge 1|2|3 4|5|6 p table th tbl ||foo|bar|hoge 1|2|3 4|5|6 p table th2 tbl ||foo||bar|hoge ||1||2|3 ||4||5|6 p table colspan tbl ||foo||c2 bar|hoge ||1||2|3|4 ||4||5|c2 6 p table rowspan tbl ||foo||r2 bar|hoge ||1||3 ||4||5|6 pre ここはpre