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 でクリップボードから取り込んでるんだと思いますので、文字化けしてしまうのでしょう。
|