日本語利用前提の mbstring 設定の覚書

UTF-8 の使用を前提とした一般的な設定

【mbstring.language】

  • mbstring で使用される言語設定(NLS)のデフォルト値

mbstring.language = Japanese
(neutral:中立《UTF-8》)

【mbstring.internal_encoding】

  • 内部文字エンコーディングのデフォルト値を定義
  • PHP で動作する文字エンコーディングを使用する
  • 変換元の文字コードが指定されなかった場合、ここで指定した文字コードが使用される
  • mbstring.internal_encoding を定義するため、php.ini の中で mbstring.internal_encoding は、mbstring.language の後に置く必要がある

mbstring.internal_encoding = UTF-8

【mbstring.http_input】

  • HTTP 入力文字エンコーディングのデフォルト値を定義
  • 自動で変換されると文字化けなどを引き起こす場合があるので pass を指定

mbstring.http_input = pass
(auto:mbstring.language の設定を使って展開)

【mbstring.http_output】

  • HTTP 出力文字エンコーディングのデフォルト値を定義
  • 自動で変換されると文字化けなどを引き起こす場合があるので pass を指定

mbstring.http_output = pass

【mbstring.encoding_translation】

  • 自動で変換されると文字化けなどを引き起こす場合があるので Off を指定

mbstring.encoding_translation = Off

【mbstring.detect_order】

  • デフォルトの文字エンコーディング検出順序を設定

mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII
(auto:ASCII,JIS,UTF-8,EUC-JP,SJIS)

【mbstring.substitute_character】

  • 無効な文字を代替する文字を定義

bstring.substitute_character = none

【mbstring.strict_detection】

  • 厳密なエンコーディング検出を設定
  • 不正な文字列を受け取った場合、特定の環境下で無限ループが発生することがあるので Off でよいでしょう

mbstring.strict_detection = Off

【mbstring.http_output】

  • HTTP 出力を設定

mbstring.http_output = UTF-8

Mac でサポート切れのスキャナーを動かす

P5170097

システムをアップグレードするとき、いつも気がかりなのは、現在の環境を引き続き利用できるかです。周辺機器やソフトウェアの買い換えによる余計な投資は抑えたいし、ましてや仕事が絡んでくると、システムや機器の更新での不測の事態は避けたいものです。利用中の機械の癖や特徴を理解したうえでの使い方も、大切な資産ですしね。

とはいえ、いつまでも古いシステムを使用し続けることは、主にセキュリティー面での危険をはらみます。この辺を考えていると、Windows の下位互換性って本当にすばらしい。Windows 7(2009)で Illustrator 9(2000)が動くとか、Windows XP(2001)のサポートが2014年までとかは本当に驚愕です。Mac じゃそうはいきませんからね。

さて、前置きが長くなりましたが、私が使っているスキャナーの一つに Canon の CanoScan LiDE 500F があります。これは2005年の発売で、Mac の OS サポートは2009年に登場した 10.6 までで終わってしまいました。いま使用中のシステムが 10.8 ですが、何の不具合もないスキャナーですからまだまだ使いたいわけです。では、どうしたらいいのか。古いスキャナーを動かすソフトウェアとして有名な「VueScan」を使う方法もありますが、これは有料です。かといって、キャノンのドライバーは10.6までしか対応していない……。

待てよ、逆に 10.6 で動くなら、10.8 でもいけるんじゃないの?ってことで挑戦です。

36103bc6207d5b74589bf1a9ead20217

まずは、ドライバー(v11.2.5.1X)をダウンロードしてインストール。

0ea25ad34902d581db84306ed0f7475b

ここで疑問に思う人もいるのではないでしょうか。「ドライバーが使えたって、スキャナー用のアプリケーションも 10.6 までしか動かないんだから、意味ないんじゃないの?」と。けっこうこれで断念している人って多いようです。しかし、実は「プレビュー」を介してスキャナーが利用できるのです。

プレビューを起動して、
ファイル>スキャナから読み込む
をみると、

1325f069e2eb8a1689909e378822f1ec

やったね、スキャナーを認識しました! さっそく読み込んでみましょう。

a4f7a4ae1cd49506092b97e5392f8820

問題なく動くようになりました! これでもうしばらくは使えそうです。

追記:CanoScan LiDE 500F のドライバーは、OSX 10.9 では作動しません。

CGI でなぜか perl のパスが通らないとき

ときどき忘れて「(#`Д´) もー! なんでだよ〜!!」ってなるので覚書。

CGI を設置していて、間違いなく書けているはずなのに、なぜか perl のパスが通らないことがあります。そこでふと思い出すのが「改行コード」。

それぞれのシステムが使う改行コードは次のとおりですが、

  • LF:UNIX系
  • CR:Mac
  • CR+LF:Windows

#! /usr/bin/perl

パスに↑この様に書いてあっても、実際は最後に改行コードが入っていて、そのコードの取り扱いがサーバーとクライアントで違うとエラーになってしまいます。例えば改行コードに CRFL を使うと、UNIX では LF だけで改行コードとみなされるので、CR があまっておかしくなってしまいます。そこで、改行コードが CRLF (\r)になっている場合、UNIX系相手なら LF(\n)に変えればいいのです。

#! /usr/bin/perl\r

#! /usr/bin/perl\n

ちなみに、改行コードはそのままで、かわりに「 –」を加える民間療法も存在しました。
参考:CGI 界にはびこる民間療法

それから、FTP で転送するときの設定も見直しましょう。

  • Asciiモード:Asciiコード(テキスト)を転送するためのモードで、改行コードを変換してくれる。
  • binaryモード:binaryファイルを転送するためのモードで、改行コードを変換しない。

.html、.txt、.cgi、.pl などは Ascii モード、画像などは binary モードと覚えておくとよいでしょう。