’90 年代前半の頃は JIS と シフトJIS のソースを扱っていた.
そのプロジェクトの最初の頃は,ターゲット環境のみでソースを管理していた.
0x1c 0x2d 漢字 0x1c 0x2e の形式.wiki 漢字シフトコード
途中からソース管理は PC-9801DA などに移行してシフトJIS になった.
ターゲット環境に移す時,ソースのコピーとシフトJIS から JIS への変換を行っていた.
Linux 環境を意識し始めてから新規に書いた共通のコードは 7 ビットの範囲にしている.
Windows AP であれば rc ファイルの STRINGTABLE が使用できるが,これにあたるものをどうするか?
まず一番簡単な方法の漢字を含むソースでの動作をテストしてみた.
この中の ccc(const char* s) の部分はまだ暫定的なコードで,登録されたテーブルから対応する JPN を求めるもの.
#include <clocale> #include <iostream> #include "i_define.hxx" #include "_tdefine.hxx" #include "ccc_mlg.hxx" bool test (void) { ccc_mlg* cm = ::get_ccc_mlg() ; { ccc_mlg_1 cm_1 ; cm_1.Name = _T("Name_1") ; cm_1.JPN = _T("名称 1") ; ccc_mlg_1 cm_2 ; cm_2.Name = _T("Name_2") ; cm_2.JPN = _T("名称 2") ; ccc_mlg_1 cm_3 ; cm_3.Name = _T("Name_3") ; cm_3.JPN = _T("名称 3") ; ccc_mlg_1 cm_4 ; cm_4.Name = _T("Name_4") ; cm_4.JPN = _T("名称 4") ; ccc_mlg_1 cm_5 ; cm_5.Name = _T("Name_5") ; cm_5.JPN = _T("名称 5") ; cm->push_back(cm_1) ; cm->push_back(cm_2) ; cm->push_back(cm_3) ; cm->push_back(cm_4) ; cm->push_back(cm_5) ; } std::tout << ccc("Name_3") << std::endl ; return true ; } int _tmain(int argc, TCHAR* argv[]) { _tsetlocale(LC_ALL,_T("")) ; test() ; return 0 ; }
「gcc 漢字 shiftjis」で検索すると -finput-charset で文字コードを指定できるとある.
pi@raspberrypi:~/projects/cc_ml_1 $ g++ cc_ml_1.cpp pi@raspberrypi:~/projects/cc_ml_1 $ ./a.out ���� 3 pi@raspberrypi:~/projects/cc_ml_1 $ g++ -finput-charset=SJIS-WIN cc_ml_1.cpp pi@raspberrypi:~/projects/cc_ml_1 $ ./a.out 名称 3 pi@raspberrypi:~/projects/cc_ml_1 $
-finput-charset=SJIS ではよくわからないエラーになる.
cp932 でも良さそう.
Synology NAS DS116 は g++ の-finput-charset の指定では変換できないみたい.
Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ g++ cc_ml_1.cpp -Wall Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ ll total 72 drwxrwxrwx+ 3 Iwao users 4096 Jan 16 22:01 . drwxrwxrwx+ 10 Iwao users 4096 Jan 16 21:36 .. -rwxrwxrwx 1 Iwao users 50452 Jan 16 22:01 a.out drwxrwxrwx+ 2 Iwao users 4096 Jan 16 21:53 bak -rwxrwxrwx+ 1 Iwao users 2001 Jan 16 22:00 cc_ml_1.cpp Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ ./a.out 3 Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ uconv -f sjis cc_ml_1.cpp > dd.cpp Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ g++ dd.cpp Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ ./a.out 名称 3 Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ g++ -finput-charset=SJIS cc_ml_1.cpp cc1plus: error: conversion from SJIS to UTF-8 not supported by iconv Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ g++ -finput-charset=sjis cc_ml_1.cpp cc1plus: error: conversion from sjis to UTF-8 not supported by iconv Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$ iconv -sh: iconv: command not found Iwao@DS116:~/gcc_test/Test/t_linux/cc_ml_1$