' EncodingShiftJISFile2Unicode2ShiftJIS_Window9Window9.bas '' ★このプログラムは、★UNICODE(utf-16)★で保存しても、 '' ★ShiftJIS★で保存しても、同じ働きをします。★ '' '' このプログラムは、以下の動作を想定します。 '' '' 1) 指定した、ShiftJIS のテキスト・ファイルを読み込みます。 '' これを、UNICODE(utf-16) に変換して、ファイル出力します。 '' ★ここでWindow9 の関数AsciiToUtf を使います。★ '' '' 2) 検証のため、UNICODE(utf-16) で出力したファイルを読み返します。 '' これを、ShiftJIS に再変換して、ファイル出力します。 '' ★ここでWindow9 の関数UtfToAsciiを使います。★ '' '' 対象のテキスト・ファイルは、ファイルを開くダイアログで指定します。 '' ファイルを開くダイアログと文字コード変換は、Window9 ライブラリを使っています。 '' https://users.freebasic-portal.de/freebasicru/window9lib/window9.html '' 変換後のファイルは、同じフォルダに別名で保存されます。 #Include "window9.bi" Dim fName As String '★拡張子無しのファイル名 Dim extension As String '★拡張子部分(例:.txt) Dim FullPass As String '対象ファイルのフルパス Dim As UShort UNICODE_FILE_BYTE = &hFEFF 'Unicode ファイルのバイト数 Dim As HANDLE OUTPUTFILE, INPUTFILE 'ファイルのハンドル Dim UnicodeMojiretsuPtr As WString Ptr 'Unicode 文字列のポインタ Dim As Byte Ptr AsciiMojiretsu 'Ascii のバイト配列 Dim sASCII As String 'UTFTOASCII で返される文字列 Dim As Integer iSizeShiftJIS 'ShiftJIS のファイル・サイズ '********************* Window9 のファイルを開くダイアログを使う ********************* FullPass = OpenFileRequester("ShiftJIS ファイルを指定","C:\test\","Text File(*.txt;*.csv;*.htm*)"_ +Chr(0)+"*.txt;*.csv;*.htm*"+Chr(0)+"All File(*.*)"+Chr(0)+"*.*"+Chr(0)) If FullPass<>"" Then fName = Left(FullPass,InStrRev(FullPass,".") -1) '対象のテキストファイルのフルパスの、拡張子無し部分 extension = Right(FullPass,Len(FullPass) - InStrRev(FullPass,".") +1) '対象テキストファイルのドット付き拡張子部分 '************** ShiftJIS から UNICODE(utf-16) ************************ '' utf-16 コードで出力するためのファイルを開きます。 OUTPUTFILE = OPEN_File(fName & "_UNICODE" & extension) '' ShiftJIS コードで、入力のためのファイルを開きます。 INPUTFILE = Read_File(fName & extension) If INPUTFILE <> -1 Then 'ファイルが開いたことを確認します iSizeShiftJIS = Size_File(INPUTFILE) 'ShiftJIS ファイル・サイズを取得 ( -Ascii_FILE_BYTE) AsciiMojiretsu = Read_DataS(INPUTFILE,Size_File(INPUTFILE)) ' Get bytes out ascii file '日本語マルチバイトからワイドに変換 UnicodeMojiretsuPtr = AsciiToUtf(PeekS(AsciiMojiretsu)) If OUTPUTFILE<>-1 Then 'ファイルが開いたことを確認します Write_Word(OUTPUTFILE,UNICODE_FILE_BYTE) 'write unicode signal bytes Write_Data(OUTPUTFILE,CInt(UnicodeMojiretsuPtr),(Len(*UnicodeMojiretsuPtr))*2) 'unicode バイトを書き出します Close_File(OUTPUTFILE) EndIf DeAllocate(AsciiMojiretsu) DeAllocate(UnicodeMojiretsuPtr) Close_File(INPUTFILE) EndIf Else MessBox("メッセージ","ファイルが選択されませんでした!") End EndIf '************** UNICODE(utf-16) から ShiftJIS ************************ '' UNICODE(utf-16)で、入力のためのファイルを開きます。 INPUTFILE = Read_File(fName & "_UNICODE" & extension) '' ShiftJIS コードで出力するためのファイルを開きます。 OUTPUTFILE = OPEN_File(fName & "_REZ" & extension ) If INPUTFILE <> -1 Then 'ファイルが開いたことを確認します Set_File_Pointer(INPUTFILE,2) ' Pointer on 2 byte Dim As Integer iSizeUNICODE = Size_File(INPUTFILE)-2 ' get size file - 2 ( -UNICODE_FILE_BYTE) AsciiMojiretsu = Read_DataS(INPUTFILE,iSizeUNICODE) ' Get bytes out Unicode file 'ワイドから、日本語マルチバイトに変換します。 sASCII = UTFTOASCII(Cast(WString Ptr,AsciiMojiretsu)) If OUTPUTFILE<>-1 Then 'ファイルが開いたことを確認します Write_Data(OUTPUTFILE,CInt(SAdd(sASCII)),iSizeShiftJIS) 'ascii バイトを書き出します Close_File(OUTPUTFILE) EndIf DeAllocate(AsciiMojiretsu) Close_File(INPUTFILE) EndIf MessBox("メッセージ","ファイル変換を終了しました!")
' EncodingUnicode2ShiftJIS_Window9.bas '' ★このプログラムは、★UNICODE(utf-16)★で保存しても、 '' ★ShiftJIS★で保存しても、同じ働きをします。★ '' '' このプログラムは、以下の動作を想定します。 '' '' 1) 指定した、UNICODE(utf-16) のテキスト・ファイルを読み込みます。 '' これを、ShiftJIS に変換して、ファイル出力します。 '' ★ここでWindow9 の関数 UtfToAscii を使います。★ '' '' 対象のテキスト・ファイルは、ファイルを開くダイアログで指定します。 '' ファイルを開くダイアログと文字コード変換は、Window9 ライブラリを使っています。 '' https://users.freebasic-portal.de/freebasicru/window9lib/window9.html '' 変換後のファイルは、同じフォルダに別名で保存されます。 #Include "window9.bi" Dim fName As String '★拡張子無しのファイル名 Dim extension As String '★拡張子部分(例:.txt) Dim FullPass As String '対象ファイルのフルパス Dim As UShort UNICODE_FILE_BYTE = &hFEFF 'Unicode ファイルのバイト数 Dim As HANDLE OUTPUTFILE, INPUTFILE 'ファイルのハンドル Dim UnicodeMojiretsuPtr As WString Ptr 'Unicode 文字列のポインタ Dim As Byte Ptr AsciiMojiretsu 'Ascii のバイト配列 Dim sASCII As String 'UTFTOASCII で返される文字列 '********************* Window9 のファイルを開くダイアログを使う ********************* FullPass = OpenFileRequester("UNICODE(UTF16)ファイルを指定","C:\test\","Text File(*.txt;*.csv;*.htm*)"_ +Chr(0)+"*.txt;*.csv;*.htm*"+Chr(0)+"All File(*.*)"+Chr(0)+"*.*"+Chr(0)) If FullPass<>"" Then fName = Left(FullPass,InStrRev(FullPass,".") -1) '対象のテキストファイルのフルパスの、拡張子無し部分 extension = Right(FullPass,Len(FullPass) - InStrRev(FullPass,".") +1) '対象テキストファイルのドット付き拡張子部分 '************** UNICODE(utf-16) から ShiftJIS ************************ '' UNICODE(utf-16)で、入力のためのファイルを開きます。 INPUTFILE = Read_File(fName & extension) '' ShiftJIS コードで出力するためのファイルを開きます。 OUTPUTFILE = OPEN_File(fName & "_ShiftJIS" & extension ) If INPUTFILE <> -1 Then 'ファイルが開いたことを確認します Set_File_Pointer(INPUTFILE,2) ' Pointer on 2 byte Dim As Integer iSizeUNICODE = Size_File(INPUTFILE)-2 ' get size file - 2 ( -UNICODE_FILE_BYTE) AsciiMojiretsu = Read_DataS(INPUTFILE,iSizeUNICODE) ' Get bytes out Unicode file 'ワイドから、日本語マルチバイトに変換します。 sASCII = UTFTOASCII(Cast(WString Ptr,AsciiMojiretsu)) '以下は、Solbianca さんに教えていただいた解説 'メモリ上にある Byte データ(バイナリデータ)の AsciiMojiretsu を、 'Wstring 型のデータとして型変換して、そのメモリ上の位置を関数 UtfToAscii に渡します。 '関数 UtfToAscii は、Wsting 型の文字列としてデータを扱い、それを ASCII に変換し、 '文字列バッファとして String 型の sASCII に出力しています。 If OUTPUTFILE<>-1 Then 'ファイルが開いたことを確認します Write_Data(OUTPUTFILE,CInt(SAdd(sASCII)),Len(sASCII)) 'ascii バイトを書き出します Close_File(OUTPUTFILE) EndIf DeAllocate(AsciiMojiretsu) Close_File(INPUTFILE) EndIf MessBox("メッセージ","ファイル変換を終了しました!") Else MessBox("メッセージ","ファイルが選択されませんでした!") EndIf
http://mneniya.ucoz.ru/