ソースコード中の日本語

日本語文書中のある文字列をリプレイスしたい場合、
NSMutableStringの replaceOccurrencesOfString:withString:options:range: を使うが、少なくとも対象文書がSJISの場合、最初のパラメータに文字列オブジェクトを使うとうまくいかない。たとえば、

replaceOccurrencesOfString:@"変換対象"

↑これはダメ。

しかし以下のようにするとうまくいく。

[_buffer replaceOccurrencesOfString:[NSString stringWithUTF8String:"変換対象"] withString:replacement options:0 range:NSMakeRange(0, [_buffer length])];

stringWithUTF8String:のときは@はいらない。オブジェクトではないからである(たぶん)。しかし、ヌルターミネートされている必要もないらしい。C文字列にはそれようのコンストラクタが用意されている。(stringWithCString:)

これと同様にして、日本語の文書をそソースコードから作成しHDDに書き出すことができる。

NSString *str=[NSString stringWithUTF8String:"これで日本語大丈夫"] ;
[str writeToFile:@"/hoge/hoge.txt" atomically:YES];

日本語の取り扱いではいろいろなやまされたが(いまも悩まされているが)、エンコーディングの基礎知識がないせいか何回失敗しても一貫した対処法が身に付かない。もっとエンコーディングの勉強をすべきであろう。

ソースコード中に日本語を書き入れるなんて狂気の沙汰と思われる方も多いだろうが、なんかマルチバイト文字になった途端に扱いを変えないといけない、というのがイヤなのである。まあ、極私的なコードしか書いてないから世間様に影響ない、というのが一番大きいけど。

| | コメント (0)

EDMessageを修正して日本語メール可能に

(続き)
EDMessageフレームワークを以下のようにソース修正して、日本語が送信できた。

ソースコードファイル名:EDPlainTextContentCoder.m
クラス名:EDPlainTextContentCoder
変更行数:2行
変更内容(1):
charset = [flowedText recommendedMIMEEncoding]; から
charset = @"ISO-2022-JP";      へ
変更内容(2):
[result setContentTransferEncoding:MIME8BitContentTransferEncoding]; から
[result setContentTransferEncoding:MIMEBase64ContentTransferEncoding]; へ。

変更前は、JISコード(ISO-2022)でなく、X-MAX-JAPANESEというキャラセット名、エンコードは"8bit"となっており、なにもしないでSMTPに渡していた。
それを、キャラセットISO-2022-JP、エンコードはBase64を無条件で指定してやることによって、日本語送信可能となった。

| | コメント (0)

EDフレームワーク

(続き)

EDMessageフレームワークでアスキー文字はメール送信可能となったが、どうして日本語が送れない。化けてしまう。

メール送信を担当するクラス、EDMailAgentには、MIMEの機能が当然ながら付いているので、日本語も送信できる筈と思い、ソースコードの探検を始める。サンプルコードがどこを探してもないので、ソースコードから、マルチバイト文字を送る場合の作法を会得するしかないのである。

実際ソースの追っかけをやってみると、やはりキツイ。というわけで、デバッガでアスキー文字送信時の流れを追いかけてそこからなんらかのヒントを得ようとする。そのためには、フレームワークをソースからビルドせねばなぬが、これには一度失敗しているのだ。

プロジェクトファイル付き、つまりはXCodeでそのままビルドできるようになっているにもかかわらず、実際やってみるといろいろこける。一時はあきらめてバイナリをダウンロードして使っていたが、ソースの追っかけでデバッガを使う必要から再アタック。結局XCodeからはうまくいかなかったが、コマンドラインから全ての土台となるEDCommonフレームワークのビルドに成功した。以下がそのときのコマンドライン。

/usr/bin/gcc-3.3 -framework Cocoa -o /Users/myHome/Development/xcode/EDCommon/EDCommon.framework/Versions/A/EDCommon -L/Users/smyHome/Development/xcode/EDCommon -L. -lresolv.9 -filelist "/Users/myHome/Development/xcode/EDCommon/LinkFileList" -prebind -Wl,-single_module -dynamiclib -compatibility_version 32 -current_version 32 -seg1addr 0x35000000 -install_name /Users/myHome/Development/xcode/EDCommon/EDCommon.framework/Versions/A/EDCommon

| | コメント (0)

NSMailDeliveryはPantherでは動かない

NSMailDeliveryを使えばプログラム中からEメール送信できるとのことだが、Pantherでは動かない。フレームワークのバグなのか、原因はよく分らない。

ネット中を探したが、Panther上では動作が不安定との報告ばかり。つまり、なかには動く環境もあるのだが、うまくいかないケースの方が圧倒的らしい。うまくいくケースにしても何が原因でうまくいくのかも分らない。

もうこれ以上ネットを探しても有益な情報は得られないだろう。Pantherでは動作しない、というのが結論だ。

代わりに、EDFrameworkというサードパーティのフレームワークを見つける。これを使うと、とりあえずアスキー文字だけなら送信できるようになった。

この項続く。

| | コメント (0)

買ってよかった技術書

米国アマゾンのレビューを読み、やはりメイヤーの「オブジェクト指向入門」は買うのをやめる。

そこで、唐突だがいま手元にあるプログラミング関係書籍のうち、いくつかオススメのものを挙げてみよう。

  • アジャイルソフトウェア開発の奥義(これは断然オススメ。他のものとは有益度がまったく違う)
  • Cocoa Programming(分厚くて英語版しかなくてしかも出版年は古いけど、Cocoa関係で一番役に立った本。ヒレガスもいいけど、使い方が違う。レファレンスにもなるし、それ以上にCocoaの哲学みたいなものが学べる。ほかはなくてもこれだけは手放せない。)
  • SMALLTALK Best Practics Patterns(手元にあるのは邦訳が出る前の原著。SmallTalker だけでなく多くの人の参考になると思う。一番印象に残っているのは名前の付け方だ。とにかく名前は大事だから時間をかけてかけすぎることはないというぐらいの強調ぶりだった)
  • Advanced MacOS Programming(これも邦訳がなく、高価だが手元に置いておく価値はある)
  • Smalltalk,Objects,and Design(隠れた名著との噂で買ってみた。もう参照することは全くないが、Smalltalkerには必須の書物だろうと思った)

逆に駄目本というのもある。一冊あげるなら「オブジェクト指向のこころ」。著者の文体から自己啓発系の積極思考をが漂っていてアブナイ感じ。文体だけでなく、なかみも見るべきものはない。米国Amazonのレビューで星一つ付けた人がいて、ボロボロに貶しているのだが、どうして星一つだけ付けたかというと、中身は下らないが著者の誠実な姿勢は本物だから、という理由だった。わたしとまったく同じ感想だったのでよく覚えている。

| | コメント (2) | トラックバック (0)

メイヤーの定番本

「オブジェクト指向入門」の第二版が出ている。
第一版に目を通したときは、”ほかの書籍や雑誌で既に得られた知識しか書いてないな”というものだった。そんな印象だったので、お金に困っているときにアマゾンマーケットプレイスで売り払ってしまった。もちろん、メイヤーの本が先にあり、それが元となってさまざまなコンセプトが広がっていったのだろうが、そのときはなんだか知っていることが多い上に実践に役に立たない原理的なことばかり書いてあると思えたのである。

さて、第二版である。以上のような過去があるためすぐに購入というわけにはいかない。しかし、全面書き直しされたというところに非常に魅力を感じる。いま読めばこの準古典の真価がわかるのではないか、とも思ったりする。なのだが現在の邦訳は原著を二分冊にした上での上巻のみらしい。しかも相当高い。原著にすれば下巻分も読めて値段も相当安くなるのだが、また退屈で売り飛ばしたくなるような本だったらどうしようというという怖れもある。金額が金額なだけに、ついそんなことを考えてしまう。

アマゾンの書評は邦訳は1件しかないし、原著の方は、第一版のレビューが転載されているだけで参考にならない。

| | コメント (2) | トラックバック (0)