C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 「vbFromUnicode」「Unicode」


(過去ログ 130 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■77067 / inTopicNo.1)  「vbFromUnicode」「Unicode」
  
□投稿者/ まあさ (5回)-(2015/09/09(Wed) 11:14:26)

分類:[VB.NET/VB2005 以降] 

VB6.0 からVB.Net2013に移行を行っています。

「vbFromUnicode」(文字列を Unicode からシステムの既定のコードページに変換する)
は、VB.NETでは使用できないようです。(相当する定数はない?)

「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
どうすれば良いでしょうか?



一応、「LenB(StrConv(str, vbFromUnicode))」は、
「System.Text.Encoding.GetEncoding(932).GetByteCount(str)」に変換してましたが、

「StrConv(LenB(StrConv(Mid(str, n, 1), vbFromUnicode)), vbUnicode)」や
「str = StrConv(str, vbUnicode)」の変換方法が分かりません


お解りの方よろしくお願いします



引用返信 編集キー/
■77073 / inTopicNo.2)  Re[1]: 「vbFromUnicode」「Unicode」
□投稿者/ 魔界の仮面弁士 (486回)-(2015/09/09(Wed) 12:24:15)
No77067 (まあさ さん) に返信
> 「vbFromUnicode」と同等の機能を、VB.NETで使用したいのですが、
> どうすれば良いでしょうか?

・Shift_JIS 相当のバイナリ(Byte型の一次元配列)
・Unicode 相当のバイナリ(Byte型の一次元配列)
・文字列(String)

などの相互変換が必要な場合には、既にご存知のように、
System.Text.Encoding クラスを使います。


この掲示板の左上にある「C# と VB.NET 入門」(もしくは、「C# と VB.NET のサンプル」)の
リンクをクリックして、『Visual Basic .NET』の文字列 (String) に関する Tips を
参考にしてみて下さい。


…というやり取りを、先月も No76687 で交わした(というか投げっぱなしにされた)記憶が
あるのですが、今回もほぼ同じ質問内容という認識で良いでしょうか?



>「LenB(StrConv(str, vbFromUnicode))」は、
>「System.Text.Encoding.GetEncoding(932).GetByteCount(str)」に変換してましたが、

その通り、「LenB(StrConv(★, vbFromUnicode))」に相当するのは、
『System.Text.Encoding.GetEncoding(932).GetByteCount(★)』ですね。

ただ、VB には「Str 関数」が存在しますので、
str という変数名は避けた方が無難かと思いますよ。(予約語では無いとは言え)



> 「str = StrConv(str, vbUnicode)」の変換方法が分かりません
String 型変数にバイナリデータを保持することはできなくなりました。

バイナリデータには Dim bin() As Byte、
文字列データには Dim txt As String のように、
それぞれ適切な型で保持するように修正し、
それぞれを Encoding クラスで相互変換するようにしましょう。


> 「StrConv(LenB(StrConv(Mid(str, n, 1), vbFromUnicode)), vbUnicode)」や
上記のコードは、そもそも VB6 の時点で実装が間違っていると思いますよ。

VB6 において、『Mid(str, n, 1)』が返すデータは
「半角1文字」または「全角1文字」のいずれかとなります。
(より正確には、「空文字列」や「Null」な可能性もありますが)


という事は、それを『LenB(StrConv(★, vbFromUnicode))』した場合、その返却値は、
「Long 型の 1」または「Long 型の 2」のいずれかとなります。
※「Long 型の 0」、「Null」の可能性もアリ。

となれば、最後の『StrConv(★, vbUnicode)』というのは、結果的には
 『StrConv(1&, vbUnicode)』
 『StrConv(2&, vbUnicode)』
に相当するコードになります。この vbUnicode 変換にはあまり意味が無く、
結果としては CStr 相当の働きしかしません。移植元の実装が、そもそも不適切かと。
引用返信 編集キー/
■77091 / inTopicNo.3)  Re[2]: 「vbFromUnicode」「Unicode」
□投稿者/ まあさ (6回)-(2015/09/10(Thu) 11:12:18)
No77073 (魔界の仮面弁士 さん) に返信

魔界の仮面弁士さん、ありがとうございました
解決しました


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -