FreeBASIC マニュアルのトップに戻る

FreeBASIC Encoding

目次→実行時ライブラリー参考→ファイル入出力関連→文字を符号化→ENCODING←オリジナル・サイト

ENCODING(符号化) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい


テキスト・ファイルの文字形式を指定します。

渡辺注:日本語(全角)文字列の文字コードの ShiftJIS ⇔ UNICODE(utf-16) 変換方法 を、追記しています。

ENCODING(付録) ShiftJIS も、合わせてご覧下さい。

構文:
open filename for {Input|Output|Append} Encoding "utf-8" |"utf-16" |"utf-32" |"ascii" as [#]filenum

パラメタ:
filename for {Input|Output|Append}
Input, Output, Append のために開くファイル名
Encoding "utf-8" |"utf-16" |"utf-32" |"ascii"
ファイルのためのコード化形式を指定します。
filenum
オープン・ファイルに関連づける、未使用のファイル番号

記述:
Unicode テキストファイルに対して、Encoding (符号化)で符号化形式を指定することで、Winput #Print # は、正しい符号化を使うことができます。
Open 命令を省略すると、デフォルトで、「ASCII」コード化になります。

現時点では、リトルエンディアン文字符号化だけがサポートされます。
渡辺注:一般に UTF-8 は BOM 無しも許されますが、FreeBASIC では UTF-8 として認識するために BOM が必要であることに注意して下さい。

例:
'' このプログラム例は、以下の動作をします
'' 1) utf-16 コード化で、テキスト・ファイルに文字列を書きます。
'' 2) ファイルの、バイト内容を表示します。
'' 3) ファイルからテキストを読み返します。
''
'' WString ではなく String を使っているため、全角文字をファイルに書き込むことはできません。
'' すべてのコンソールが WString の表示をサポートしているわけではないので、
'' この例では、Stringを使っています。

'' この例で使うファイル名はパスを含まないので、プログラムと同じフォルダのファイルになります。
Dim f As String
f = "sample.txt"

''
Scope
  Dim s As String
  s = "FreeBASIC"
  Print "ファイル名 " + f + " に書き出す内容:"
  Print s
  Print

  '' utf-16 コードで出力するためのファイルを開きます。
  '' そして、短いメッセージを出力します。
  Open f For Output Encoding "utf-16" As #1

  '' ASCII文字列は、utf-16に変換されます。
  Print #1, s
  Close #1
End Scope

''
Scope
  Dim s As String, n As LongInt

  '' 同じファイルをバイナリーで開きます。そして、すべてのバイトを読みます。
  Open f For Binary As #1
  n = LOF (1)
  s = Space ( n )
  Get #1,,s
  Close #1
 
  Print "ファイル名 " + f + " のバイナリ内容:"
  For i As Integer = 1 To n
    Print Hex( Asc( Mid( s, i, 1 )), 2); " ";
  Next
  Print
  Print
End Scope

''
Scope
  Dim s As String
 
  '' utf-16コードで、入力のためのファイルを開きます。
  '' そして、メッセージを読み返します。
  Open f For Input Encoding "utf-16" As #1

  '' ASCII文字列は、utf-16から変換されます。
  Line Input #1, s
  Close #1

  '' テキストを表示します。
  Print "ファイル名 " + f + " をテキスト読み込み:"
  Print s
  Print
End Scope
Sleep


実行画面(コンソール)に、下のように出力されます。
ファイル名 sample.txt に書き出す内容:
FreeBASIC

ファイル名 sample.txt のバイナリ内容:
FF FE 46 00 72 00 65 00 65 00 42 00 41 00 53 00 49 00 43 00 0D 00 0A 00

ファイル名 sample.txt をテキスト読み込み:
FreeBASIC


 以下は、日本語(全角文字列)の例です。
'' EncodingAscii2Utf16.bas
'' このプログラム例は、以下の動作をします
'' 1) Ascii(日本語) コード化で、テキスト・ファイルを読み込みます。
'' 2) utf-16 コード化で、文字列をファイルに書きます。
'' 3) 書き出したutf-16 ファイルからテキストを読み返します。
'' 4) 最初のファイルと照合できるように Ascii(日本語) コード化で、ファイルに書きます。
''
'' WString を使っているため、全角文字をファイルに書き込むことができます。
'' この例で使うファイル名はパスを含まないので、プログラムと同じフォルダのファイルになります。

Dim As Single t1,t2
Dim f As String
f = "sampleJp"
t1=Timer

Scope
   Dim s As WString *3000
  
   '' Ascii(日本語) コードで、入力するファイルを開きます。
   Open f & ".txt" For Input Encoding "ascii" As #1
   '' ASCII文字列は、そのまま読み込まれます。
  
   '' utf-16 コードで出力するためのファイルを開きます。
   Open f & "Utf16.txt"  For Output Encoding "utf-16" As #2
   '' ASCII文字列は、utf-16に変換されます。
  
   Do Until Eof(1)               '' ファイルの端に達するまで、繰り返します。
      Line Input #1, s           '' テキストの行を読みます ...
      Print #2, s                '' ... そして、ファイルにそれを出力します。
   Loop
  
   Close #1
   Close #2
End Scope
''

Scope
   Dim s As WString *3000
   Dim s2 As String
  
   '' utf-16 コードで入力するファイルを開きます。
   Open f & "Utf16.txt"  For Input Encoding "utf-16" As #1
   '' utf-16文字列は、そのまま読み込まれます。

   '' Ascii(日本語) コードで、出力するためのファイルを開きます。
   Open f & "Ascii.txt" For Output As #2
   '' utf-16文字列は、ASCII文字列に変換されます。
    
   Do Until Eof(1)               '' ファイルの端に達するまで、繰り返します。
      Line Input #1, s           '' テキストの行を読みます ...
      Print s
      s2 = s                     '' ワイドから、日本語マルチバイトに変換
      Print #2, s2               '' ... そして、ファイルに出力します。
   Loop
  
   Close #1
   Close #2
End Scope

t2=Timer

Print
Print
Print "変換所要秒数 = ";t2 - t1
Sleep

プラットホーム差:
方言差:
QBからの違い:
参照:
ファイル入出力関連に戻る
←リンク元に戻る プログラム開発関連に戻る
ページ歴史:2022-03-27 13:48:26
日本語翻訳:WATANABE Makoto、原文著作者:AntoniGual

ホームページのトップに戻る

表示-非営利-継承