Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1363 / 13644 ツリー ←次へ | 前へ→

【74887】String引数にUTF-8文字列を渡す方法 りった 13/10/21(月) 17:33 質問[未読]
【74890】Re:String引数にUTF-8文字列を渡す方法 りった 13/10/22(火) 9:18 質問[未読]
【74891】Re:String引数にUTF-8文字列を渡す方法 Abyss 13/10/22(火) 12:42 発言[未読]
【74897】Re:String引数にUTF-8文字列を渡す方法 りった 13/10/22(火) 14:58 お礼[未読]
【74901】Re:String引数にUTF-8文字列を渡す方法 Abyss 13/10/22(火) 15:59 発言[未読]
【74904】Re:String引数にUTF-8文字列を渡す方法 γ 13/10/22(火) 19:59 発言[未読]

【74887】String引数にUTF-8文字列を渡す方法
質問  りった  - 13/10/21(月) 17:33 -

引用なし
パスワード
   いつもお世話になっております。下記御存じの方がいらっしゃいましたら、ご教示頂きますようお願いします。

■質問
関数の引数(ByVal xxx As String)にUTF−8の文字列を渡す方法をご教示下さい。
尚、文字列の入力元はワークシートのセルの内容です。

■背景
ブラウザから手動でhttpコマンド(※1)を叩く試験を、マクロ化しようとしています。
コマンド送信は出来るのですが、ブラウザから実行する場合とマクロから実行する場合で
文字コードに違いがあるようです。(※2)
試験内容を変えずにマクロ化する必要があるので困っています。


※1 開発している装置に送るコマンドと戻りがhttp。
  イメージ: http://10.10.2.3/set_xxx?xxx=1 とブラウザのURL欄に入力すると、
        result=OK と記載されたWebページが表示される。

※2 ブラウザのURL欄に入力するとUTF−8で下記コマンドを実行
  http://10.10.2.3/set_yyy?yyy=あいう (意味:パラメータyyyに「あいう」を設定)
  http://10.10.2.3/get_yyy      (意味:パラメータyyyを取得)

  → ブラウザから実行した場合は、 yyy=%e3%81%82%e3%81%84%e3%81%86 が返る。(UTF−8)
    マクロから実行した場合は、 yyy=%82%a0%82%a2%82%a4 が返る。(S−JIS)

■補足
下記APIを使用してhttpコマンドを実行しています。
Private Declare Function httpOpenRequest _
      Lib ”wininet.dll” _
     Alias ”httpOpenRequestA” _
     (ByVal hConnect As Long _
    , ByVal lpszVerb As String _
    , ByVal lpszObjectName As String _ ← ここがURL
    , ByVal lpszVersion As String _
    , ByVal lpszReferer As String _
    , ByVal lpszAcceptTypes As Long _
    , ByVal dwFlags As Long _
    , ByVal dwContext As Long) As Long

「ERROR:本文に禁止語句が含まれています。」
と表示されたので、全て全角に変換しています。
変換前は、英数は半角です。。

以上です。

【74890】Re:String引数にUTF-8文字列を渡す方法
質問  りった  - 13/10/22(火) 9:18 -

引用なし
パスワード
   回答つきませんね。無理なんですかね。。。

文字列の入力元を変えれば出来る等、制約付きの回答でも頂ければありがたいです。

【74891】Re:String引数にUTF-8文字列を渡す方法
発言  Abyss  - 13/10/22(火) 12:42 -

引用なし
パスワード
   HttpOpenRequest関数を使った事はないですが、
ご質問の内容からみて、成功はしているものの
ご希望通りの結果までに至らない事ですね?

だとしたら、お使いのOS環境がWindow2000以上であれば
Ansi版のHttpOpenRequestAではなく、
直接文字列ポインターを渡せるWide版を使うべきだと思いますよ。

その前にUFT-8変換のためWideCharToMultiByte関数が
使えると思います。

【74897】Re:String引数にUTF-8文字列を渡す方法
お礼  りった  - 13/10/22(火) 14:58 -

引用なし
パスワード
   回答ありがとうございます。

>・・・成功はしているものの
>ご希望通りの結果までに至らない事ですね?

はい。そうです。

>だとしたら、お使いのOS環境がWindow2000以上であれば
>Ansi版のHttpOpenRequestAではなく、
>直接文字列ポインターを渡せるWide版を使うべきだと思いますよ。

そうなんですね。大変勉強になりました。

>
>その前にUFT-8変換のためWideCharToMultiByte関数が
>使えると思います。

ありがとうございます。やってみます (^o^)

【74901】Re:String引数にUTF-8文字列を渡す方法
発言  Abyss  - 13/10/22(火) 15:59 -

引用なし
パスワード
   あるいは、

> ブラウザから実行した場合は、
> yyy=%e3%81%82%e3%81%84%e3%81%86 が返る

のように、現状のAPIはそのままで、
ADODB.Streamオブジェクトを使い、ご提示のような
形式でutf-8文字列をparameterとして渡す事も考えられます。
(この方法がラクする気がします。)

【74904】Re:String引数にUTF-8文字列を渡す方法
発言  γ  - 13/10/22(火) 19:59 -

引用なし
パスワード
   横から失礼します。
ADODB.Streamで変換することで解決だと思いますが、
少し教えてください。

セル上の文字列を送っているなら、ユニコードが渡っていると思うんです。
なぜ、S-JISが返ってくるのかは自明のことなんでしょうか。
また、UTF-8文字列をURLエンコードしたものを渡すことも
可能ですが、それは求めていることとは別のことでしょうか。

1363 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free