tagCANDY CGI VB2008 のソースコードがVB6.0上で文字化け
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VB2008 のソースコードがVB6.0上で文字化け
このスレッドはロックされています。記事の閲覧のみとなります。
元に戻る スレッド一覧へ 記事閲覧
このページ内の検索ができます。(AND 検索や OR 検索のような複数のキーワードによる検索はできません。)

VB2008 のソースコードがVB6.0上で文字化け [No.102の個別表示]
日時: 2008/05/09 09:34
名前: 花ちゃん

VB2008 をいじっていたら、文字化けをする事が判明。

VB2008 のIDE上で、ソースコードをクリップボード経由で、VB6.0 のテキストボックス等や
IDE上に貼り付けると文字化けを起こしてしまいます。

同様の事を VB2005 のソースコードをコピーして試すと文字化けは起きません。

VB2005 のコードで、ListBox1.Items.Add(CType(iData.GetData(DataFormats.Text), String))
として取得した場合も文字化けを起こします。

上記の代わりに、 ListBox1.Items.Add(Clipboard.GetText) で取得すると文字化けは
起こりません。

詳しい原因は調査中です。ご存知の方は、ご一報をお願いします。

下記で同様事が話題になっているのですが、そちらは、VS2005 との事
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=352369&SiteID=7
メンテ

Page: 1 |

Re: VB2008 のソースコードがVB6.0上で文字化け  (No.1) [スレッド一覧へ]
日時: 2008/05/08 13:37
名前: 魔界の仮面弁士

手元にクリップボード調査ツールが無い(clipbrd.exeだけ)上に、
2008 の環境も用意できてないので検証できませんが、調査するとすれば

・コピー元のファイルが、Shift_JIS エンコードな場合はどうなるか。また、UTF-8 では?
・CF_TEXT 以外のテキスト(CF_UNICODETEXT, CF_OEMTEXT, CF_RTFTEXT, CF_HTML 等)はどうなっているか。

といったあたりでしょうかね。


> ListBox1.Items.Add(Clipboard.GetText) で取得すると文字化けは起こりません。
引数なしの GetText メソッドは、
 1. Unicodeテキスト
 2. テキスト
の順で取得される仕様だったかと。

そして、VB6 エディタのクリップボードの利用順位は、
 1. テキスト
 2. Unicodeテキスト
 3. OEMテキスト
だったはず…。
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.2) [スレッド一覧へ]
日時: 2008/05/08 13:38
名前: 魔界の仮面弁士

Dim d As IDataObject = New DataObject()
d.SetData(DataFormats.OemText, False, "OemText")
d.SetData(DataFormats.Rtf, False, "Rtf")
d.SetData(DataFormats.Text, False, "Text")
d.SetData(DataFormats.UnicodeText, False, "UnicodeText")
d.SetData(DataFormats.Html, False, "Html")
Clipboard.Clear()
Clipboard.SetDataObject(d, True)
 
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.3) [スレッド一覧へ]
日時: 2008/05/09 00:07
名前: 花ちゃん

VB6.0 のエディタ上に 貼り付けた場合は Text になり、メモ帳やVB2005/VB2008のエディタ上
では、UnicodeText で貼り付けられるようですね。
メモ帳に貼り付けた場合は文字化けしないので、下記のようにしてVB6.0上で取得すると

Private Sub Command1_Click()
   If Clipboard.GetFormat(vbCFText) Then
      Debug.Print Clipboard.GetText(vbCFText)
      
      '結果  VB2008    "ABC縺ゅ>縺・23"
      '結果  VB2005     "ABCあいう123"
   End If
End Sub

VB2008 のエディタ上で コピーした物だけが文字化けを起こすのは、Text 形式のFormat が
おかしいのでしょうか?

因みに、クリップボーにコピーされた Format 形式を調べると、VB2005 の場合とVB2008 の
場合では全く同じ Format でした。

System.String
UnicodeText
Text
Rich Text Format
Hidden Text Banner Format
Locale

メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.4) [スレッド一覧へ]
日時: 2008/05/09 01:36
名前: 魔界の仮面弁士

> VB6.0 のエディタ上に 貼り付けた場合は Text になり、
CF_TEXT 部が無い場合は、先述のように CF_UNICODETEXT が第2候補として
ペースト対象となる仕様のようです。

> メモ帳やVB2005/VB2008のエディタ上では、UnicodeText で貼り付けられるようですね。
# こちらの順序は未確認…。


> '結果  VB2008    "ABC縺ゅ>縺・23"
「UTF-8 バイナリ」のデータを、「Shift_JIS としてデコード」した場合の
典型的な化け方ですね、見事に……。


UTF-8 データが格納されているのであれば、IDE 側の実装バグですね、これ。
CF_TEXT (vbText) 形式は、ANSI テキストで保持されるべきフォーマットですし。
http://msdn.microsoft.com/en-us/library/ms649013.aspx
》CF_TEXT
》Text format. Each line ends with a carriage return/linefeed (CR-LF) combination.
》A null character signals the end of the data. Use this format for ANSI text.


ところで、フィードバック #294340 (対 VS2005/SP1) を見ると、コピー時に、CF_TEXT への
CRLF 改行への補正もなされていないと書いてありますね。この点はどうですか?
(現在、VS2008 端末が出払っているので、こちらでは検証できず…)
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.5) [スレッド一覧へ]
日時: 2008/05/09 09:39
名前: 花ちゃん

>CRLF 改行への補正もなされていないと書いてありますね。この点はどうですか?
こちらは大丈夫のようです。
VB2008 上で下記のコードをコピーしてからコードを実行するとVB6.0の場合と同じく
文字化けしてしまいますね。
VB2008 の IDE の問題のようですね。

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
   Dim iData As IDataObject = Clipboard.GetDataObject()
   Dim myText As String = ""
   'クリップボードにテキストデータがあれば
   If iData.GetDataPresent(DataFormats.Text) Then
      myText = CType(iData.GetData(DataFormats.Text), String)
   End If
   TextBox1.Text = myText
End Sub

実行結果の画像
http://hanatyan.sakura.ne.jp/yybbs/upl//1210145534-1.gif
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.6) [スレッド一覧へ]
日時: 2008/05/09 11:12
名前: 魔界の仮面弁士

以下、今回の件とは関係無いですけれども:

> Private Sub Button1_Click(ByVal sender As System.Object, _
>                           ByVal e As System.EventArgs) Handles Button1.Click

この部分、VB2008 であれば
  Private Sub Button1_Click() Handles Button1.Click
と単純化して書けますね。
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.7) [スレッド一覧へ]
日時: 2008/05/09 11:30
名前: 花ちゃん

>この部分、VB2008 であれば
>  Private Sub Button1_Click() Handles Button1.Click
>と単純化して書けますね。

あ! 本当だ。 知りませんでした。

でも、VB2005 へは単純にコピペで使えなくなりますね。

メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.8) [スレッド一覧へ]
日時: 2008/05/09 19:22
名前: 魔界の仮面弁士

> 同様の事を VB2005 のソースコードをコピーして試すと文字化けは起きません。
VB2005/SP1 で試したところ、再現しました。

どうやら、ソースコードを開いた時の [ファイル]-[保存オプションの詳細設定] で
指定されたエンコードに依存しているようですね。


>> CRLF 改行への補正もなされていないと書いてありますね。この点はどうですか?
> こちらは大丈夫のようです。
おっと。LF 改行のソースからコピーしても、CRLF になりましたか。という事は、
2008 では、改行コードの補正機能だけは修正された、とか…? なんとも面妖な話。
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.9) [スレッド一覧へ]
日時: 2008/05/09 20:41
名前: 花ちゃん

>どうやら、ソースコードを開いた時の [ファイル]-[保存オプションの詳細設定] で
>指定されたエンコードに依存しているようですね。

そんなメニューがあったのですね。

[ツール]-[ユーザー設定]-[コマンド]でメニューに追加しました。
(Express Edition では標準でメニューに表示されていないとか)

VB2005 では、デフォルトで、S-JIS になっていたので文字化けしなかったようです。
VB2008 も同様にして、S-JIS に変更したところ文字化けしなくなりました。

>2008 では、改行コードの補正機能だけは修正された、とか…? なんとも面妖な話。
上記も同様に[行の終わり]の設定で選択ができますね。

お蔭様で無事解決する事ができました。 ありがとうございました。
メンテ
Re: VB2008 のソースコードがVB6.0上で文字化け  (No.10) [スレッド一覧へ]
日時: 2008/05/09 23:25
名前: 魔界の仮面弁士

> そんなメニューがあったのですね。
> [ツール]-[ユーザー設定]-[コマンド]でメニューに追加しました。
> (Express Edition では標準でメニューに表示されていないとか)
Express は使った事が無いのでわかりませんが、Pro や Team の場合は、
標準で組み込まれていたかと思います。
# VB.NET 板の No.7485〜No.7488 あたり。


> お蔭様で無事解決する事ができました。
え、それで解決なんですか? (^^;

>>>>> 下記で同様事が話題になっているのですが、そちらは、VS2005 との事
>>>>> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=352369&SiteID=7
のスレッドと、まったく同じ結論しか出ていないような気がするのですけれども。

》VS2005は、ファイルのエンコードがUTF-8のとき、コピーしたときの CF_TEXT も
》UTF-8 になる仕様のようです。VB.NET2003でもやってみたら結果は同じでした。

》VB6 は CF_TEXT でクリップボードから取り込んでるんだと思いますので、文字化けしてしまうのでしょう。
メンテ

Page: 1 |