Archives

February 2008 の記事

そろそろソースコードも UTF-8 で統一したいと常々思っていました。
VisualC++ の場合 BOM (ef bb bf) があれば UTF-8 とみなしてくれます。

コンパイラおよびリンカでの Unicode のサポート

バイナリには記述したコードのまま格納されるわけではなく、
必要に応じて ShiftJIS や UTF-16 に変換されます。

関連エントリ
_T() と TEXT() の違いやソースの文字コード

逆に UTF-8 のままデータを記述することが難しいのと、
BOM が付くと他のコンパイラでエラーになることがあるようです。

"表示" を utf-8 でコンパイルしてみる

  SJIS = 95 5c 8e a6
  UTF8 = e8 a1 a8 e7 a4 ba
  UTF16= 8868 793a

VC2008: utf8+bom  = 95 5c 8e a6  (SJISに変換されている)
VC2008: utf8      = e8 a1 a8 e7 a4 ba
CW    : utf8+bom  = error
CW    : utf8      = e8 a1 a8 e7 a4 ba
gcc4.1: utf8+bom  = error
gcc4.1: utf8      = e8 a1 a8 e7 a4 ba

VC bom 無しはたまたまうまくいってますが、Shift JIS 判定ありなので
問題が出ます。(warning C4819 になる事も)

例えば "引\n" を UTF-8 記述すると、バイト列では

 引       \  n
 e5 bc 95 5c 6e

ShiftJIS でも意味のあるコードなので、'\' 'n' が変換されず
文字として残ります。

常に日本語 (cp932) とみなすこの動作は、Windows のシステムロケールを
見ているようです。VisualStudio は英語版を使っているし、option の
"International Settings" にある Language を
"Same as Microsoft Windows" でなく English にしても変化無し。

Vista で コントロールパネル→地域と言語のオプション→管理
「Unicode対応ではないプログラムの言語」を「英語」に切り替えると
コードが素通りし、"引\n" の \n が改行に変換されるようになりました。

でも他のアプリに影響が出るので、このまま使うのは問題ありです。

gcc では「 -finput-charset=cset 」「 -fexec-charset=cset 」の
オプションがあって、それぞれ個別に指定できるようです。
例えば utf8 と sjis にすると VC とほぼ同じ挙動となりました。
でも BOM はだめ。


久しぶりに新しい GPU 出てますね。しかも 10.1 対応。
PC Watch S3、DirectX 10.1対応GPU「Chrome 400」

Windows Vista SP1 の方は一応 d3d10_1core.dll も追加されていて
なんとなく動きそうに見えますが、実際に走らせると E_NOTIMPL で
エラーになります。

おそらく March SDK 待ちだと思います。
でも3月はもうすぐだ。


過去エントリ
DirectX 10.1 RADEON HD3800 シリーズ


2008/02/19
電池切れ1

CASIO の電波時計 WAVE CEPTOR DQD-1000 を長年愛用しています。
目覚ましだけでなく温度計も付いてるし時間も狂わないし。

唯一の難点は、電池切れ警告が無いことです。
でもこれかなり致命的だったりします。


(1) 設定した時間にアラームが鳴り始めて EL バックライトも点灯

(2) 電力消費量の急激な増加に伴い電圧降下

(3) 電池容量が少ないと、電圧降下に耐えられなくて瞬時にリセットされる

(4) もちろんアラーム音は即座に止まるし時間も 12:00 に戻る
  電池容量が少なくても時計としてはまだ動作可能

(5) そのうち電波受信して勝手に正常な時刻に戻る

(6) アラームが鳴らなかったのに、時計としては正しい時刻を指しているので
  朝起きられなかった原因がわからない。


数年前、前回電池切れのときも全く同じミスをしました。
成長していない・・。



プロバイダのサービス終了に伴い、これまで代表で使っていた
メールアドレスが使用できなくなりました。

各種ソフトウエアのドキュメントに書いてあるアドレスでは
今後メールが届かなくなりますのでどうぞご了承ください。

webページに掲載してある方は修正いたしました。
またフォームからの送信もこれまでどおり大丈夫です。

10年以上使ってきたメールサービスでした。
ご迷惑をおかけいたします。
よろしくお願いします。