月別アーカイブ: 2015年8月

DelphiXE8は#128=#$0080ではないのか?

私、Delphiは#128と#$0080はイコールだと思っていました。

でも、そうではないと思われる場面に遭遇しました。

きっかけは海外のSkRegExpユーザーさんからの「XE8上で、3.0.8と3.1.のでマッチ結果が異なる」という指摘でした。

正規表現='\b[Ĉ]([^Ĉ\d]+)'
対象文字列='Ĉ Ĉĉĉ';

コレは先頭の2文字にマッチするのが正解です。

もちろん、私のテストでもそうなります。

しかし、そのユーザーさんのテストではマッチしないというのです。

問題が再現しないって言う最悪のケースです。

コレって本当に困りますよね。

幸い、ユーザーさんが問題解決に協力すると言ってくれました。

問題箇所を絞り込むために何度もテストプログラムを送り、結果を返してもらいました。

で、問題の原因となったコードはコレでした。

if AStr^ < #128 then

Ĉ は U+0108H です。

この条件式は False になるはずです。

しかし、テストコードの結果は True になっていました。

そりゃマッチするわけないですわ!

Delphi は XE2 以降で仕様が変わったのでしょうか?

ま、そんな疑問は置いておいて。

問題解決が先です。

ならばと、次のように書き換えてテストプログラムを送って結果を返してもらいました。

if AStr^ < #$0080 then

問題は解決しました。

でも、どうなってんの? コレ?

ちなみにXE8でテストしなかった理由は、私がXEで止まっている&XE8体験版の試用期限が切れたためです。