C言語で、Shift-JISを使うときに、""の中で特定の文字が化けるというのは有名ですね。
たとえば、「ソ」や「表」などが該当します。
これは、この文字の2バイト目がちょうど\のコードと同じなので、エスケープシーケンスと解釈されてしまうからです。
しかし、言語によっては、注意すべき文字はこれだけではないのです。
それは、Perlで、とくに正規表現を使ったときのことです。
※コードはイメージです
このように、「ー」を正規表現に入れてしまうと、
Unmatched [ in regex; marked by <-- HERE in m/しー <-- HERE げんご/ at test.pl line 5.
とActivePerlさんに怒られてしまいました。
もちろん[など使っていません。最初は謎でした。
この原因は、さっきと同じように「ー」の2バイト目がちょうど[のコードと一致してしまったからのようです。
したがって、C言語で「ソート」と書くのに「ソ\ート」とするように、適切な文字を補ってやればいいのです。
このように
こうすることで、無事
C言語たのしいです
と表示させることができました。
まあ、]でなくてよかったですね。
【Perl】正規表現の罠【SJIS】
Re: 【Perl】正規表現の罠【SJIS】
use utf8;
はお嫌いですか?
\でエスケープすると文字化けしない処理系に持っていったときに逆に次の文字とくっ付いてエスケープシーケンスと解釈される可能性がありますよ。
実際にBREWアプリの開発ではシミュレータ用は文字化けしないVisual C++を使って実機用は文字化けするARMコンパイラを使うというのがあります。
#define SJISCYOUON "x81x5b"
とか定義して使うのが良いです。
はお嫌いですか?
\でエスケープすると文字化けしない処理系に持っていったときに逆に次の文字とくっ付いてエスケープシーケンスと解釈される可能性がありますよ。
実際にBREWアプリの開発ではシミュレータ用は文字化けしないVisual C++を使って実機用は文字化けするARMコンパイラを使うというのがあります。
#define SJISCYOUON "x81x5b"
とか定義して使うのが良いです。