○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++