Visual c++7.1ソースファイルencodingのサポート

1955 ワード

Visual c++7.1ソースファイルencodingのサポート
[email protected]
Revision: 1.0 Date: 2005/10/16
C++のソースファイルはまずテキストファイルであるため、encodingの問題に関連するに違いない、vc 7.1どのencodingコードのソースファイルを処理できますか?以下は私が行った実験で、私の環境はwindows 2000簡体字中国語版で、システムとユーザーのlocale設定はすべて中国語(中国)です.
  • ソースファイルはiso-8859-1符号化を採用し、ascii以外の文字を含む.例は、
    
    #include <fstream>
    
    int main() {
        std::ofstream of("test");
        of << "aoû";
    
        return 0;
    }
    
    
    ここではiso-8859-1における符号化がFBである法文字符号化を含む.IDEでダブルクリックしてファイルを開くと、違いが表示されます.
    #include <fstream>
    
    int main() {
    	std::ofstream of("test");
    	of << "ao?;
    
    	return 0;
    }
    
    
    は明らかに表示されていません.代わりに?をクリックします.これは、vc editorが自動検出符号化でファイルを開く(デフォルトの開き方を変更していない場合)ため、ファイルのメタ情報から符号化を試み、その符号化でファイルを復号しようとするためである.このメタ情報の最も一般的なものはBOM(Byte Order Mark)であり、あるテキストがUTF-8、UTF-16を用いて符号化されていることを識別するためである.UTF-32のどちらかです.しかし、ここで使用する例にはBOMなどのメタ情報はありません.このときvc editorはシステムlocaleのencodingでファイルを開きます.ここがGBKです.FB(變)GBKでは漢字の1バイト目とされ、後ろの二重引用符は2バイト目とされます.このFB 22はGBKでは漢字の有効な符号化ではないので、1つの?号として表示され、右半分の二重引用符も失われます.この場合、システムlocではなくeditorに正しい符号化を伝えることです.aleの.幸いvc 7.1のメニュー項目Open Withがあり、中にはC++Source Code Editor(with encoding)があり、ファイルを開いて使用するコードを選択できます.ここではWestern European(ISO)を選択し、結果が正しいことを示します.次にコンパイルを行いますが、「error C 2001:newline in constant」と報告され、フランス語記号のある行に出ます.よく考えてみると、やはり同じ原因だと思いますが、今回困ったのはeditorではなくcompilerです.このとき、C/C++のPreprocessor命令setlocaleを利用してcompilerの正しい符号化を伝えることができます.ここで私が書いたのは、#pragma setlocale(「enu」)
  • です.
  • ソースファイルに対して他の符号化を採用する場合、UTF-8、UTF-16(with BOM)、UTF-16(little endian without BOM)、UTF-16(little endian without BOM)を含め、editorについては言うまでもなく、対応する符号化を選択すれば正しく表示できる.compilerに対して、BOM付きはもちろん、BOM付きUTF-16を持たなくても、コンパイラはsetlocaleを使わずに符号化を検出することができます.

  • 注意すべき点は、vc editorが符号化を誤りと認識した場合、誤りが表示されるだけでなく、編集して保存すると、変更されていない箇所を自動的に修正し、上記の例ではFB 22(")を3 C(?)に置き換え、FB 22は有効なGBK符号化ではないからである.