@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

半角→全角へ

投稿者投稿内容
cats
大ベテラン
会議室デビュー日: 2002/11/29
投稿数: 221
お住まい・勤務地: 東京
投稿日時: 2003-01-30 17:18
VbStrConv.Narrowだと、
"ケ" -> "ケ"
"ヶ" -> "ヶ"
基本的に1対1対応ですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-01-30 18:43
 WindowsXPでしましたが、相変わらず半角円マークは全角に変わりませんねぇ...

 一昨年、半角を全角に換える必要があったので、C++からWin32APIを使ってやったのですが、半角円マークだけ置き換わらないので、APIで変換した後にもう一度スキャンするという、不細工な方法を使いました。


 LocaleIDは、ヘルプにも書いてありますが、システムに設定されている言語以外に換えるときに0以外を指定します。何番がどこに対応しているかは、プラットフォームSDKのヘルプにあると思います。これを指定するのはどんなとき・・・例えば、半角で「カ゛」(2文字)をこの関数で全角に変換すると、「が」1文字に変換します。ん?なぜカタカナがひらがなになるかって?ちゃんとオプションがあります。この辺の制御をしていると思われます。例えば、ドイツ語には「ウムラウト」でしたっけ?ありますよね。これを適切に処理してくれるのでしょう。ギリシャに設定して「a」をワイドにしたら「α」になったりして・・・?

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-01-30 18:53 ]
どらごん
会議室デビュー日: 2003/02/05
投稿数: 8
投稿日時: 2003-02-05 11:17
引用:

Jittaさんの書き込み (2003-01-30 18:43) より:
 WindowsXPでしましたが、相変わらず半角円マークは全角に変わりませんねぇ...
[ メッセージ編集済み 編集者: Jitta 編集日時 2003-01-30 18:53 ]



はじめまして初投稿のどらごんと申します_(_^_)_<以後、よろしくお願いします

Jittaさんがおっしゃる通り、VB過去バージョンのStrConv同様に
・[\][']["]が正常にWide変換出来ない
という現象をWindowsXPで確認済みです

ワタシも不細工ではありますが、変換変換また変換で対応しました。
本当は、Microsoft.VisualBasic.strConvをオーバーライドしたかったのですが、
勉強不足で実現出来ませんでした。もっと良い方法などがあれば・・・

サンプルまでに(こんなんです)

Public Function StrConvEx(ByRef istrValue As String, _
ByVal iConversion As VbStrConv, _
Optional ByVal iLocalID As Long = 0) As String

If iConversion = vbWide Then
istrValue = istrValue.Replace("\"c, "¥"c)
istrValue = istrValue.Replace("'"c, "’"c)
istrValue = istrValue.Replace(""""c, Chr(&H8168)) ' "の2バイト文字
End If
Return StrConv(istrValue, iConversion, iLocalID)

End Function
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-02-05 16:15
引用:

どらごんさんの書き込み (2003-02-05 11:17) より:

Jittaさんがおっしゃる通り、VB過去バージョンのStrConv同様に
・[\][']["]が正常にWide変換出来ない
という現象をWindowsXPで確認済みです


 え!それは気がつきませんでした。キーボードから入力できる文字はすべて試したと思っていたんだけどなぁ・・・

 ところでご提示のサンプルでは、引数「istrValue」の値=呼び出し元の値が変わってしまいますよね?それはそれで仕様だったのですか?また、iConversionはフラグの合成ですが、複数のフラグ「全角にして英小文字にする」という指定に対して大丈夫ですか(すみません、VBでの扱いについては理解できていません。BCBでは==演算子で処理できなかったので)。
どらごん
会議室デビュー日: 2003/02/05
投稿数: 8
投稿日時: 2003-02-05 21:21
引用:

Jittaさんの書き込み (2003-02-05 16:15) より:
 ところでご提示のサンプルでは、引数「istrValue」の値=呼び出し元の値が変わってしまいますよね?それはそれで仕様だったのですか?また、iConversionはフラグの合成ですが、複数のフラグ「全角にして英小文字にする」という指定に対して大丈夫ですか。



ん〜確かに。
速度重視で参照渡しにしたつもりでしたが、使う側から言ったらバグの基ですね
値渡しにしておきます。助かりました(将来的に)、ありがとうございます。

あ、それとiConversionは大丈夫ですよ♪元々あるStrConvと同じ引数型の宣言にしておくだけでフラグ合成も自動で行ってくれますので。

スキルアップ/キャリアアップ(JOB@IT)