Shift_JIS文字を含むソースコードをgccでコンパイル後、警告メッセージが表示される
This document (00006574) is provided subject to the disclaimer at the end of this document.
問題点
gccコンパイルすると、警告メッセージ "warning: unknown escape sequence: '\203'" が出力され、実行すると一部文字化けされてしまいます。
再現手順:
<source.c>
#include <stdio.h>
int main()
{
printf("カーソル\n");
return 0;
}
上記のソースファイルを次のコマンドでコンパイルします。
$ LANG=ja_JP.sjis gcc source.c
すると、以下の警告メッセージが出力されます。
warning: unknown escape sequence: '\203'
解決方法
gccは、ソースコードにおいて日本語(2バイト文字)に一部対応していません。
上記の "カーソル\n" の "ソ" の部分(#835C)と "ル" (#8386)という文字列を "835C 8386" として扱うのではなく、 "83 5C 83 86" という1バイト単位で扱うため、 "5C " の部分が "\" によるエスケープシーケンスとして、認識されてしまうからです。
そのため、未知のエスケープシーケンスがあるという警告が出力されます。
このようなシフトJISコードの文字の場合、2バイト目が16進数 "5C" である時、続けて "\" (0x5C)の文字を加えることで、文字化けを回避することができます。
改訂版:
#include <stdio.h>
int main()
{
printf("カーソ\ル\n");
return 0;
}
なお、コンパイラにgccを使う限り、この問題を解消する方法はありません。
Disclaimer
この情報は、米国Novell, Inc.およびノベル株式会社の内外から発生したものです。本文書の内容または本文書を使用した結果について、いかなる保証、表明または約束も行っていません。また、本文書の商品性、および特定目的への適合性について、いかなる黙示の保証も否認し、排除します。
本文書に記載されている会社名、製品名はそれぞれ各社の商品、商標または登録商標です。
- ドキュメントID: J00006574
- 作成年月日: 10-FEB-2006
- 修正年月日:
- ドキュメントリビジョン: 1
- 分類: SUSE Linux
- 対象NOVELL製品およびバージョン: SUSE Linux Enterprise Server 9
- カテゴリ: