○Shift-JISからJIS(ISO-2022-JP)に変換
■test.txtというSJISのファイルをJISに変換してtest.htmファイルに書き込みますl
#include <stdio.h>
#include <string>
#include <mbstring.h>
//Shift-JISからJIS(ISO-2022-JP)に変換
//sjis : 変換元 //jis : 変換先
void SJIS_JIS(std::string*sjis,std::string*jis){
unsigned int i=0;
bool ConFlag=false;
int iLen=sjis->length()-1;
while(i<iLen){
if(_ismbblead(sjis[0][i])){//マルチバイトを判定
if(!ConFlag){//マルチバイトの開始を書き込む
char buff[4]="";
buff[0]=0x1B;
buff[1]=0x24;
buff[2]=0x42;
jis->append(buff);
ConFlag=true;
}
}else{
if(ConFlag){//ASCIIの開始を書き込む
char buff[4]="";
buff[0]=0x1B;
buff[1]=0x28;
buff[2]=0x42;
jis->append(buff);
ConFlag=false;
}
}
if(ConFlag){
//2バイト文字の変換
union Field
{
struct Bit
{
unsigned char H;
unsigned char L;
} bit;
unsigned long WORD;
} field;
field.bit.H=sjis[0][i+1];
field.bit.L=sjis[0][i];
field.WORD =_mbcjmstojis(field.WORD);
char buff[3]="";
buff[0]=field.bit.L;
buff[1]=field.bit.H;
jis->append(buff);
i=i+2;
}else{
//2バイト文字以外はそのままコピー
char buff[2]="";
buff[0]=sjis[0][i++];
jis->append(buff);
}
}
if(ConFlag){//最後にASCIIの開始を書き込みます
char buff[4]="";
buff[0]=0x1B;
buff[1]=0x28;
buff[2]=0x42;
jis->append(buff);
}
}
int main(){
std::string jis;
std::string sjis;
//SJISコードの文をファイルから読み出し
{FILE * fp;
if((fp=fopen("test.txt","r"))==NULL){
//エラー処理
}else{
while(!feof(fp)){
int c=fgetc(fp);
char buff[2]="";
buff[0]=c;
sjis.append(buff);
}
fclose(fp);
}}
SJIS_JIS(&sjis,&jis);//SJISからJISに変換
//JISコードの文をファイルに書き込み
{FILE * fp;
if((fp=fopen("test.html","w"))==NULL){
//エラー処理
}else{
for(int i=0;i<jis.length();i++){
fputc(jis[i],fp);
}
fclose(fp);
}}
return 0;
}
▲トップページ
>
Windows と C++