ひまつぶし雑記帖

utf8移行と自分メモその2

2007/1/10 [23:36:02] (水) 天気

で、 趣味は読書SNS は、utf8環境となった、のかな。今まで全部eucだったんで、実際どんなところに影響するのかまだ把握できてない。jisにsjisにeucにutf8に、と。4つも違う文字コードがあるのっておかしいんじゃね。と語尾をちょっと上げてみる。utfに収斂されていく勢い、と思ってもどこかのベンダーが妙な拡張してまた違うコードが出てきたりして。

てのはともかく。
今さらだけど perl5.8は。
出入りするデータはただのバイト列として扱う。utf8を扱うにはutf8フラグを立ててperlにこれはutf8として扱ってね、と教える必要がある。encoding とか use utf8 なんかがフラグ立てに使われるらしい。
今後推奨されるのはスクリプトをunicodeで書いて use utf8 する書き方だそうだ。そうするとスクリプト内の文字列には utf8フラグがつくのでなにかと便利、なのかな。

わたしが混乱したところ。
文字コードとしてのutf8とperlのutf8フラグは「また別」。

postgresqlから取り出したばかりのutf8の文字「根性」とスクリプト内のutf8フラグの立ったutf8文字列「根性」をそのまま比較しても意図した通りにはならない
取れたての「根性」 != スクリプト内の「根性」
となる。取れたての「根性」にはutf8フラグが足りないのだ。
Encode::decode('utf8',「根性」)などと「根性」にutf8フラグをつけてやれば
「根性」==「根性」
となる。それじゃせっかくだしprintしてみるか、と「根性」を出すと wide char うんぬんと脅される。utf8フラグのついた文字列を表に出すとケチをつけられるのだ。
Encode::encode('utf8',「根性」)とやって今度はutf8フラグを落としてやると警告は出なくなる。
勘違いしてたんだけど、utf8フラグというのはperlの内部のフラグ。
これをくっつけて出力するわけではない。
リダイレクトすれば普通に「文字コード」utf8で書き込まれるだけ。データベースへのinsertも同じこと。

Encodeのdecodeとencodeてのは。
「jis、sjis、euc、utf8」で書かれた文字列にutf8フラグをつけるのがdecode(その文字列がどのコードで書かれているのか教えてutf8フラグをつける)
utf8フラグがついてしまえば自由自在でごにょごにょ。その後表に出すような時にエクセルで読むからシフトJISでお願いと言われたらencodeで「jis、sjis、、euc、utf8」に変換する。この時utf8フラグも落とすので上のwide char うんぬんの警告は出ない。
decodeでutf8フラグをつけて、内部処理が終わったらencodeでutf8フラグを落としましょう、ということかな。

unicodeで書かれたスクリプトにutf8フラグをつけると変数名に「日本語」が使えたりする。

use utf8
my $気合=10:
while($気合--){
 print Encode::encode('utf8','喝');
}

喝喝喝喝喝喝喝喝喝喝

となる。スクリプトがわかりやすいぞ。

my $除夜の鐘=108;
my $鐘の音='ゴーン';
my $おやじギャグ='カルロス';
というのを見るだけでなにをしようとしてるのか分かるでしょ。

て、ネタを続けるのはうるさい、な。

postgresqlからselectなりで読み込んだらdecodeする必要がある(全部が全部というわけじゃないけど)。スクリプトのあちこちに散らばるselectを探していちいちdecodeなんちゃらと書き込むのは勘弁してほしい。ので検索してみると、decode encode のための wrapperを自前で作るひともいたけど、perl DBI DBD-Pgと postgreql だと connectしたら
dbh->{pg_enable_utf8}=1
で text と varchar のフィールドから取り出すものに関してutf8フラグをつけてくれる。ありがたい話だ。
今までのスクリプトをほとんどそのまま使える。ただ、wide char うんぬんの警告がうるさいこともあるんで、utf8::is_utf8(文字列) でutf8フラグがついてるかどうかをチェックするようにした。

cgiのformでの文字コードの扱いでもひっかかる。
いやutf8にしたいんだけど、と。
文字コードを変換するためにEncode::encodeを使うにはEncode::decodeでutf8フラグをつけてやる必要がある。ところがdecodeにはその文字列がどの文字コードで書かれているか教えてやる必要がある。
冒頭に書いたように流れてくるコードはjisだなんだで4種類。どのコードなのかわからないので推測するしかない。文字どおりGuessというのがあるんだけど、試しに「アイウエオ」とだけかいたファイルをeuc、sjis、jisの3種類用意して試したところ'shiftsiji or euc'というエラーで死ぬ。ネットで見てると、Guessはできるだけつかわないでね、と。弱ったなあと思いつつ駄目元でJcode.pmを同じファイルに使ってみたところちゃんと判定するじゃありませんか。…???。Encode.pmのwrapperになってるはずなので、結果は同じ(判定に失敗)と思ってた。
ここはありがたくJcode.pmを使わせていただくことに。
標準入力から受け取ったら、
Jcode::convert($str,'utf8')
と文字コードをutf8に。(互換のために参照渡しでもいいけど、参照渡しにする必要はないっぽい)多分文字コードを変える時にutf8フラグを落とすので、Jcodeで文字コードを変えたら
Encode::decode('utf8',文字)と、utf8フラグをつけてあげる。
もしかするとperlIOで上記の手間は不要かもしれないなぁ。

んで、urlエンコードする場合はutf8フラグを落としてやらないと、エンコードされす、日本語なんかがそのまま流れることになるので要注意。

昨日に続いて長文連載。どうせ忘れるに決まってるから、こうやってあちこちに自分メモ、だ。


こっちのページもutf8に移行するかなぁ。

 

»電子書籍制作代行についてはこちら

データ消失と自分メモ

2007/1/10 [00:58:50] (水) 天気

趣味は読書SNS 用にサーバーをリプレースしたら、こっちのデータをいくつか取りこぼしてしまった。

今まで、約10ヶ月ほど、黙々と文句も言わずサーバーとして安定動作し続けてくれたDELLも、読書SNSでの登録冊数が2万冊を超えて、さすがに厳しくなってきた。去年の暮れ大晦日に思い立って秋葉原に走り、ソフマップの牛丼パソコン大盛りというのをつゆだく(メモリ2G)にして買ってきた。
この際、サーバー環境をutf8でやってみようとあれこれいじって、昨日DELLから牛丼にリプレースしたばかり。

というのが取りこぼしデータのあらすじ、かな。

自分用にメモしておくと。
FreeBSD-6.1releaseのフロッピーを FreeBSDの総本山 からもってきて起動。ところが牛丼パソコンの内蔵LANポートを認識してくれなかったので、慌ててPCI用のLANカード800円也を買ってくる。fdiskに当たるフェーズで「ジオメトリがおかしい」という警告に脅される。検索してみると「気にしなくていい」らしい…。
サーバー用に/varとか/とか/tmpなんかもデフォルトより多めに取ってみる。ルーターをDHCPに設定すると今度はすんなりネットワークに繋がって、あとは流れ込んでくるのを見てるだけだ。Xも使わないので気楽なもんだ(とはいえ、依存関係でXがらみのライブラリを要求してくるのがあるので、フルインストール)bash2だけpackageで入れていったん終了。
まずはportsでcvsupをインストール。supfile とか make.confとかいじりつつ、ソースを最新のものにアップデート。カーネルもいらないデバイスをはずしてpostgresql用にいくつか設定。make buildworldとかbuildkernelとかやってインストール世界をしたらバージョンが6.2-stableになっていた。CPUはpen4ななんだけど、コンパイルが早いんで驚いた(たぶんLibretto50だと3日がかりだろう)

portsからのインストール。
jless jvim の小物ふたつ。
apache20 mod_perl2。apacheはもしかしたら使うかも、と思ってMakefileでオプション扱いになっているproxyモジュールもコンパイルするようにちょっと書きかえ。httpd.confは今までのものをそのまま持ってきて、DocumentRootなど変更したところをいじった。
sslは、ssl.confはほとんどそのまま。自己認証を作り直し。ココの過去ログを見ながら。いや、役に立つページです、と自画自賛しておこう。
qmailはlocaltimeのパッチぐらいで普通にインストールしてtcpwrapperもインストール。メールを発信できるように。
ImageMagickとかssh2とかsudoとかlhaとかkakasiとかnkfとか、ユーティリティ類をインストール。
んでもって、どうしようと、けっこう真面目に悩んだpostgresql。今までどおり8.1でeucでいくなら、8.1をインストールすればいい。でも、良い悪いとか好き嫌いは別にして、世間はutf8へ邁進中。この際だから、うちもutf8にしてしまおうか、と。あーでもないこーでもない、とネット見ながらたかがこれだけのことで約二日ほど考えて、結局最新バージョンの8.2でutf8で行くことにした。
rc.dに入るシェルスクリプトのオプションが変だったのでちょっと修正して。
su - defaultuser
initdb --encoding=utf8 --lc-collate=C --no-locale

DELLのpostgresql-8.1側で
pg_dump -U pgsql -E utf8 > db.dump
文字コードをutf8にしてデータベースをdump
牛丼のpostgres-8.2の準備で
su - defaultuser
createdb -T template0 database_name
pgsql -U user -d database_name -f db.dump
で、あっさりデータベースのutf8化に成功…ナマのアクサンは化けてたけど。

今度はわたしがutf8を扱うための準備。
古いバージョンのteratermはutf8を扱えないので、puttyに設定…って、UTF-8じゃなくてUTF-8(CJK)で設定、なんてわからんかった。
jlessはLANGをja_JP.UTF-8にするとcore吐いて死ぬので、検索して lv というのをソースから。
肝心のemacsはutf8を普通に扱えるのは22かららしい。最新のportsに入ってるemacs22はまだdevel。とはいえエディタがなきゃしょうがないんで、develをインストール。apel、skk、mewはソースを持ってきてconfigureから。
簡単なスクリプトを試して、utf8でいけそうだと思ったので、portsでperlのモジュールをガシガシインストール。
use utf8;
とか
$DBH->{pg_enable_utf8}=1;
とか、書き出すと長くなるので、また明日、かな。

とりあえず。

 

»電子書籍制作代行についてはこちら

謹賀新年。

2007/1/1 [17:00:17] (月) 天気

あけましておめでとうございます。
仕事がらみで東京での年越し。嫁と嫁の友達の3人で鍋をつついておりました。黒帯、澤乃井、春鹿があって、とりあえず黒帯を呑んでたら、どうやらひとりで一升ほとんどあけたようで、記憶がプツリ。気がついたらあけましておめでとうだった。

二日酔い状態のまま、うちから事務所にログインして管理ページを開いてごにょごにょ。

実は去年の暮れ、というか、昨日なんだけど、ソフマップで牛丼パソコン大盛りというのを買ってしまった。 趣味は読書SNS で、登録冊数が2万冊を超えて、検索だのなんだのが重苦しい。ソースコードが汚いのはおいといて、機械の力でなんとかなるなら機械で、という安直な発想。OSはいらないけど、メモリは2Gは欲しい。秋葉原を歩いていろいろチェック。予算5万程度でメモリ2G搭載というのは厳しかった。結局、定価6万弱の牛丼パソコンにメモリ2G入れて8万ちょい。
さて、FreeBSDのインストールだ、と思ったら、内蔵LANポートを認識してくれない。NBに945G と SBにICH7 という構成らしいが、素人のわたしにはなんのこっちゃ、でネットに繋げないことにはインストールすらできない。google様にお伺いを立ててもそれらしいことは出てこないし…。
比較的ゆっくりのこの時期にセットアップしてSNSのサーバーをリプレースしたかったなぁ。

てことで、今年もよろしく。健康で良い年でありますように。

»電子書籍制作代行についてはこちら

小心者の日曜日だ

2006/11/12 [23:15:08] (日) 天気

Excelの手作業部分を潰せないかと日曜だというのに仕事がらみのスクリプト。小心で、真面目な性格が損をする、という典型だ。とほほ。

my @head = split(/,/, $header); 
my $import_head = { map{ $_ => ''} @head };

カラムが50以上あるんでいちいち書くのは面倒。どうしたもんか、と思ってふと思い出したのが先月まで行ってた賽の河原仕事でみたスクリプト。
perl4までの知識で止まってるんで map なんてほとんど使ったことがなかった。こうやって一発でハッシュを初期化するのに使えるんだなぁ、と。

ほんとはDBD-Excelを使ってExcelファイルを直接いじりたいところだったんだけど、今日はもう力つきた。(DBD-csvなんてモジュールもあった)おいおいやっつけていくべか。

で、上記作業はすべてWINDOWS上。
active perl に skk に windows版kakasi に、エディタはxyzzy(…xyzzyがなければどうなったことやら)事務所のパソコンには windows版apache もインストールしたけど、さすがにウチでそこまでやる必要もないよなぁ(2台のFreeBSDでapacheは走ってるし)

まわりはみんなビシバシWINDOWSを使いーのExcelを使いーの…。くどいようだけど。世間様はデフォルトでExcelのスキルを要求するものだったのか。今さらながら、ちょっと愕然。
たぶん、間違いなくこの後は、phpとかmysqlとの格闘が出てくる。perlとpostgresqlの組み合わせはマイナーだったかもなぁ(ため息)

»電子書籍制作代行についてはこちら

本日のエラーメッセージ

2006/8/7 [09:25:29] (月) 天気

加齢とともに、脳みそのシワが体の表面に転移しつつあるので、外部記憶にメモしておくのですよ。

portベースでVirtualHostにするところがあったんだけど

warn
overlaps with VirtualHost

さんざん悶絶した結果、ssl.confとのバッティング。以前、ポートベースでSSLのふりわけができるのかどうか試したことがあって、その時の残滓がひっかかっていた。
httpd.conf
192.168.1.2:8080
ssl.conf
192.168.1.2:8080
どっちにも同じヴァーチャルホストの設定。なのにサーバー名とかドキュメントルートは違ってるし。そりゃいかんですって。

»電子書籍制作代行についてはこちら

postgresqlのバックアップ

2006/6/21 [12:43:34] (水) 天気

メモ

飲み込みが悪いんで、再度、postgresqlのバックアップとリストアのメモ

pg_dump -Fc -E euc-jp -U pgsql -b db_name >dump_file

createuser ..
createdb -T template0 db_name
pg_restore -d db_name dump_file

template0 てのをいつも忘れてしまう。

自宅の 本読みSNS も、図書カードが5000冊を超えて、登録された本の冊数はそれ以上となってきてるので、バックアップを考えないとなぁ、と。

 [19:15:06] 
今日はほぼいちんちweb屋の作ってきたwebアプリのソースコードを読んで過ごす。テスト環境をでっちあげたので改造もちょっと。うーん、モジュール化てのは便利できれいなものだ。もちろんわたしのスキルでは細かいところはわからないけど、大ざっぱに構造がわかる・わかりやすい。わたしの古臭いスクリプトとは大違いだな。うううむ。

蒸し暑すぎる…地元でひっかけて帰るか。

 [2006/06/22 18:49:04] 
デフォルトの追加
ALTER TABLE テーブル ALTER COLUMN 列 SET DEFAULT デフォルト 

えーっと。DEFAULTが大文字じゃなきゃいけない、てのに気づかずン時間ハマる…。

»電子書籍制作代行についてはこちら

profile

profile

 
doncha.net
名前:
飯田哲章
mail:
t2aki@mrh.biglobe.ne.jp
twitter:
t2akii

WEBサービス制作/電子書籍制作

検索
<<2020/9>>
  12345
6789101112
13141516171819
20212223242526
27282930

リンク

WINDOWS版サウンドノベル
おかえりください PC WINDOWS版サウンドノベル
『おかえりください』体験版

[8 Page]« »
1 2 3 4 5 6 7 8

TOTAL:2892

2020 (14)
1 (2)
2 (6)
4 (1)
6 (1)
7 (2)
8 (2)
2019 (17)
1 (3)
2 (4)
3 (2)
4 (2)
5 (1)
6 (1)
8 (1)
10 (1)
12 (2)
2018 (21)
1 (3)
2 (2)
3 (2)
4 (1)
5 (1)
6 (6)
8 (1)
9 (1)
10 (2)
12 (2)
2017 (32)
1 (2)
2 (1)
4 (2)
5 (1)
6 (6)
7 (3)
8 (5)
9 (3)
10 (2)
11 (2)
12 (5)
2016 (41)
1 (5)
2 (5)
3 (2)
4 (3)
5 (4)
6 (6)
7 (2)
8 (2)
9 (3)
10 (1)
11 (4)
12 (4)
2015 (99)
1 (11)
2 (12)
3 (9)
4 (6)
5 (8)
6 (8)
7 (3)
8 (5)
9 (16)
10 (6)
11 (1)
12 (14)
2014 (112)
1 (16)
2 (5)
3 (6)
4 (12)
5 (16)
6 (19)
7 (9)
8 (6)
9 (4)
10 (8)
11 (6)
12 (5)
2013 (145)
1 (24)
2 (15)
3 (18)
4 (23)
5 (14)
6 (11)
7 (7)
8 (11)
9 (5)
10 (4)
11 (6)
12 (7)
2012 (103)
1 (1)
2 (1)
3 (4)
4 (3)
5 (7)
6 (26)
7 (17)
8 (5)
9 (8)
10 (10)
11 (11)
12 (10)
2011 (54)
1 (4)
3 (7)
4 (4)
5 (14)
6 (6)
7 (3)
8 (3)
9 (1)
10 (4)
11 (2)
12 (6)
2010 (70)
1 (12)
2 (7)
3 (6)
4 (6)
5 (3)
6 (10)
7 (6)
8 (4)
9 (3)
10 (4)
11 (3)
12 (6)
2009 (144)
1 (15)
2 (12)
3 (12)
4 (6)
5 (15)
6 (6)
7 (10)
8 (9)
9 (17)
10 (12)
11 (14)
12 (16)
2008 (148)
1 (10)
2 (6)
3 (10)
4 (11)
5 (13)
6 (10)
7 (13)
8 (19)
9 (18)
10 (12)
11 (13)
12 (13)
2007 (106)
1 (7)
2 (5)
3 (3)
4 (7)
5 (5)
6 (9)
7 (8)
8 (13)
9 (18)
10 (11)
11 (8)
12 (12)
2006 (158)
1 (28)
2 (28)
3 (25)
4 (7)
5 (9)
6 (7)
7 (12)
8 (13)
9 (10)
10 (7)
11 (6)
12 (6)
2005 (350)
1 (31)
2 (26)
3 (26)
4 (27)
5 (29)
6 (30)
7 (32)
8 (30)
9 (30)
10 (32)
11 (29)
12 (28)
2004 (292)
1 (24)
2 (24)
3 (29)
4 (27)
5 (28)
6 (25)
7 (26)
8 (24)
9 (12)
10 (19)
11 (26)
12 (28)
2003 (318)
1 (22)
2 (25)
3 (21)
4 (28)
5 (28)
6 (28)
7 (28)
8 (29)
9 (26)
10 (29)
11 (28)
12 (26)
2002 (317)
1 (29)
2 (26)
3 (26)
4 (25)
5 (28)
6 (30)
7 (27)
8 (21)
9 (25)
10 (27)
11 (28)
12 (25)
2001 (277)
1 (17)
2 (21)
3 (23)
4 (20)
5 (31)
6 (18)
7 (26)
8 (25)
9 (29)
10 (19)
11 (24)
12 (24)
2000 (53)
6 (9)
7 (4)
8 (2)
9 (3)
10 (1)
11 (15)
12 (19)
1999 (3)
7 (1)
10 (2)
1998 (18)
9 (9)
10 (7)
11 (2)