header


REALbasic TOP
新機能
動作環境
機能比較表

価格・ご購入

ダウンロード
FAQ

既知の問題

ヒント
サポート
   
 
お問い合わせ先
   

ヒント
ファイル入出力
REALbasic 5.xは、以前のバージョンとは異なり、内部で利用する文字コードとして Unicode を利用します。
コントロールに入力する文字列なども Unicode/UTF-8 の文字列を利用する必要があり、ファイルシステムに ShiftJIS が 利用されている Windows 上では、明示的に文字コードの変換を行う必要があります。
例えば、

 Dim c As TextConverter
 Dim src, dest As String
 'src = ------- ' ここに変換対象の文字列を代入する
 c = GetTextConverter(GetTextEncoding(1),GetTextEncoding(&h100))
 dest = c.convert(src) ' dest に変換後の文字列が入る
などとして変換してから利用していただく必要があります。
バイナリデータ
REALbasic 5.xからは、文字列データの取り扱いが大幅に変更され、 V4.5以前と異なっています。
バイナリで読み込んだデータの文字エンコードについては、明示的に使用する必要があります。
日本語データを利用する場合には、

 Dim s As String
 Dim bs BinaryString
  ' 中略
 s = bs.RreadPString
 ListBox1.cells(1,1) = DefineEncode (s, Encodings.UTF8)

のように、一旦変数に読み込んでから、文字エンコード属性を設定する必要があります。

Q:日本語を表示させると文字化けしてしまいます。原因と対策は?
A:REALbasic 5.0からは、コード内部で利用する文字列の扱いが変更され、日本語データなどは、Unicode/UTF-8形式が標準になりました。このため、以前のバージョンで開発されたアプリケーションプログラムが保存したデータを利用しようとした場合、あるいは他のソフトが保存したデータを利用しようとした場合などは、ShiftJISが文字コードとして利用されいる場合が多いでしょう。そのようなデータを扱う場合には、テキストコンバーターを利用して、文字エンコードを変更する必要があります。このような場合には、以下のようなコードを追加して、文字コードを変更してください。

- テキストコンバーターを利用した文字コードの変換

  Dim c As TextConverter
  Dim src_str As String //変換前の文字列
  Dim dest_str As String //変換後の文字列

  //' src_str = .... ' 予めsrc_strに変換したいデータをセットしておく

  c = GetTextConverter (Encodings.ShiftJIS, Encodings.UTF8)
  dest_str = c.convert (src_str)

また、文字列形式の変数オブジェクトには文字エンコード情報が内部的に付加され、コントロールを利用した画面への表示の際には、この文字エンコード情報に基づいてレンダリングが変更されます。しかし、デフォルトの文字エンコードは英語になっているため、日本語の文字列を正しく表示したい場合には、明示的に文字列エンコードを指定する必要があるかも知れません。これに該当する場合には、以下のようなコードを追加してみてください。

- 日本語文字列エンコードを指定する
  Dim s As String //文字コードを指定したい文字列
  //s = .... ' 予め s に変換したいデータをセットしておく
  s = DefineEncoding (s, Encodings.UTF8)

 

Q:REALbasicからメールソフトにデータを送ろうとすると、日本語が文字化けしてしまいます。どうすればよいですか?
A:REALbasicのデベロッパは、ShowURLメソッドを使って、外部メールソフトにデータを送り、メールの送信をさせるようにしていることがあるようです。日本語が化ける直接の原因は、ShowURLメソッドが日本語文字列を正しくURLエンコード方式に従って変換できないことです。したがって、RFC1738に従って文字列をエンコード処理すると、正常に文字列を受け渡しできる可能性があります。
しかし、本来、ShowURLメソッドはウェブブラウザに指定したURLのページを表示させるために用意されているものであり、メールの送信に利用することはお勧めできません。 REALbasic 5.0には、SMTPSocketクラスが追加されており、こちらを利用してメールを送信されることをお勧めいたします。REALbasic 5.0のマニュアルの記載には誤りがあり、SMTPSocketクラスのSMTPSocket.AppendMessageメソッドは実際には存在していません。REALbasic 5.2のマニュアルの記載に従って、SMTPSocket.Messages.Appendを利用する必要があります。従って、SMTPSocketクラスを利用した最も簡単なメール送信のためのコードは、以下のようになります。

- SMTPSocketによるメール送信のコード例
  Dim mes As EMailMessage
  Dim SMTPSocket1 As SMTPSocket
  mes = new EMailMessage
  mes.FromAddress = "src@abc.def.com" //送信元アドレス
  mes.AddRecipient "dest@abc.def.com"// 送信先アドレス
  mes.Subject = "Subject Here"//メールタイトル
  mes.bodyplainText = "Something Message" //メール本文
  SMTPSocket1 = new SMTPSocket
  SMTPSocket1.Address = "Mail Server Address" ' メールサーバーのアドレス
  SMTPSocket1.Messages.Append (mes)
  SMTPSocket1.SendMail

ただし、このままでは日本語の文字列は正しく送ることができないので、日本語の文字列を送信したい場合には注意してください。日本語の文字列を送信する場合のコード例は以下のようになります。 日本語文字列を送信する場合の注意事項などについての説明はサポートの範囲を超えますので、ここでは触れられませんが、ご興味のある方は関連するRFC文書などに目を通してみてください。例えば、以下のコード例では、サブジェクトの長さは変換後の文字列で64バイト程度までしか使えません。 また、残念ながら、WindowsプラットホームではISO-2022-JP形式の文字コードへの変換ができないため、以下のコードを実行しても日本語を送信することができません。何らかの方法で送信したい文字列をISO-2022-JP形式に変換することをご検討ください。

- 日本語を送信する場合のコーディング例
  Dim mes As EMailMessage
  Dim s, s_subject, s_message As String
  Dim c As TextConverter
  c = GetTextConverter (Encodings.UTF8, GetTextEncoding(&h0820))
  s_subject = "日本語サブジェクト"
  s_message = "日本語メッセージ"
  mes = new EMailMessage
  mes.FromAddress = editFromField.Text
  mes.AddRecipient editToField.Text
  mes.Headers.AppendHeader ("Content-type", "text/plain; charsert=ISO-2022-JP") s = c.convert (s_subject)
  mes.Subject = "=?ISO-2022-JP?B?"+EncodeBase64 (s)+"?="
  mes.bodyplainText = c.convert (s_message)
  SMTPSocket1.Address = "Mail Server Address" //メールサーバーのアドレス
  SMTPSocket1.Messages.Append (mes)
  SMTPSocket1.SendMail

 

©2005 ASCII SOLUTIONS,Inc.all rights reserved.