天使と悪魔選手権

Excelでセルに入力されている文字列をUTF-8形式にURLエンコードする方法を探しています。

下記のURLでShift-JISにURLエンコードできるものは提供されているのですが、
UTF-8に変換できるものは見つかりませんでした。

http://www.vector.co.jp/soft/winnt/net/se369699. …

どうぞよろしくお願いいたします。

A 回答 (8件)

> このソースはVBAを立ち上げてコピペかなにかで使用するのでしょうか、


> それともJScript用にエディタか何かで記述するのでしょうか…

■ マクロ(VBA)で使う場合の手順

1. Excel起動
2. [Alt]+[F11] キーを押して Visual Basic Editor(以下 VBE)起動
3. VBE メニューで [挿入]-[標準モジュール] をクリック
4. 3. で開いたスペースに #4 の以下のコードをコピー&ペースト
  ただし、このサイトは URL を投稿すると前後に?記号がくっつく
  ので、除去して下さい
5. VBE を閉じる
6. A1 セルに適当な文字を入れ、[Alt]+[F8] を押してマクロ実行

■ワークシートで使う場合の手順

1. 1.~5.まではマクロで使う場合と同じ
2. ワークシートに戻る
3. A1 セルに適当な文字を入力
4. B1 セルに次の数式を入力
  =UrlEncode(A1)
    • good
    • 1
この回答へのお礼

KenKen_SPさん、ありがとうございます。

最初、#4のコードが上の8行だけでいいことにきづかずに
手間取りましたが、できてみたら完璧でした。
%E3%83%86%E3%82%B9%E3%83%88になりました。
これで一括変換できるようになります。
ありがとうございました。

お礼日時:2007/08/07 00:28

Yahoo は渡されたクエリの文字セットをサーバサイトで自動判別


してますので、UTF-8 なのか EUC-JP なのかの検証には不向です。

試すとしたら、明示的に文字セットを指定できる Google でしょう。

ie=UTF-8 という部分が「クエリを UTF-8 で送ります」という意味
です。q= の後に検索キーワードを URL エンコードしたものが続き
ます。実際に下記をクリックすれば試せますが...

■ %E3%83%86%E3%82%B9%E3%83%88
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q= …
http://www.google.co.jp/search?hl=ja&ie=EUC-JP&q …

■ %A5%C6%A5%B9%A5%C8
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q= …
http://www.google.co.jp/search?hl=ja&ie=EUC-JP&q …

したがって、%E3%83%86%E3%82%B9%E3%83%88 は UTF-8 で URLエンコード
されたもので間違いないと思います。
    • good
    • 0
この回答へのお礼

検索エンジンの違いでいろいろなことが変わってくるのですね…
今回はcharset=UTF-8でhtmlを生成するPerlの検索結果に対して、
エクセルデータから書き出した静的なインデックスページからの
直リンクを貼りたかったため、
(説明がややこしくてすみません…)
検索結果用のエンコード部分をまとめて出したかったのですが、
これですべて解決できそうです。
ありがとうございました。

お礼日時:2007/08/07 22:55

こんにちは。



>表記のとおりにやってみたところ、
>%E3%83%86%E3%82%B9%E3%83%88ではなく、
>%A5%C6%A5%B9%A5%C8

それは、元の漢字コードの問題ではないでしょうか?

私の場合は、Unicode2EUC Unicode から EUC となつていますが、元の文字のコード自体の指定はしていません。JIS で入ってきても同じ結果になります。それは、Yahoo の検索などでみて、検証していただければ分かるはずです。

>%E3%83%86%E3%82%B9%E3%83%88ではなく、

「%A5%C6%A5%B9%A5%C8」こちらは、「テスト」という文字に戻せますので、間違いないと思います。

もし、同じ文字だとしたら、おそらく、文字を一回、別のコードに変換して、それを、EUC に変換しているように思われます。そこに、UTF-8 変換がされているとなると、この話は急に難しくなってくるように思います。

おそらく、Web 関係だとは思いますが、そのサイトを紹介していただくか、周辺的な詳しい事情が分かれば、少し状況は変わるように思うのですが、今の状況では、私の知っている一般的なコード変換からは、それに到達するのは無理かなって思います。
    • good
    • 0
この回答へのお礼

すみません、
複雑すぎてよくわからないのですが、
でもEUCもSHIFT-JISもUTF-8も変換方法があるというのは
今後の参考としてたいへんありがたいです。
ありがとうございました。
またよろしくお願いいたします。

お礼日時:2007/08/07 22:49

こんばんは。



>希望は、
>%E3%83%86%E3%82%B9%E3%83%88
>という答えなんですが、
これは、「EUC」 といいます。

今回は、必ず、VBEditor のツール-参照設定-Basp21 10 Type Library にチェックして、事前バインディングをしてください。どうも、CreateObject で、実行時バインディングですと、誤動作するようです。

Function Unicode2EUC(strText As String) As String
  '要参照設定:BASP21 を使用
  Dim bobj As Basp21 '事前バインドを採用
  Dim Buf As String
  Dim bufArry As Variant
  Dim s As Variant
  Const EUC As Integer = 2
  Set bobj = New Basp21
  'スペースの変換、全角スペースを半角に置き換え
  strText = Replace(strText, Space(1), " ", , , vbTextCompare)
  If Len(strText) <> LenB(StrConv(strText, vbFromUnicode)) Then
    strText = VBA.Trim(strText)
    bufArry = bobj.Kconv(strText, EUC)
    For Each s In bufArry
      Buf = Buf & "%" & Hex(s)
    Next s
  Else
    Buf = strText
  End If
  Unicode2EUC = Buf
End Function

なお、インターネットのWeb サイトに用いる場合は、内容的に変わります。以下のように、半角は、そのまま素通りします。また、y オプションは、半角スペースを「+」と表現します。

Function Unicode2EUCW(strText As String, Optional y As Boolean = False) As String
  '要参照設定:BASP21 を使用
  Dim bobj As Basp21 '事前バインドを採用
  Dim Buf As String
  Dim bufArry As Variant
  Dim s As Variant
  Const EUC As Integer = 2
  Set bobj = New Basp21
  
  Do
    strText = Replace(strText, Space(2), Space(1), , , vbTextCompare)
  Loop Until InStr(strText, Space(2)) = 0
  If y Then
    'Yahoo 型
    strText = Replace(strText, Space(1), "+")
  End If
  If Len(strText) <> LenB(StrConv(strText, vbFromUnicode)) Then
    strText = VBA.Trim(strText)
    bufArry = bobj.Kconv(strText, EUC)
    For Each s In bufArry
      If s > 99 Then
       Buf = Buf & "%" & Hex(s)
      Else
       Buf = Buf & ChrW(s)
      End If
     
    Next s
  Else
    Buf = strText
  End If
  Unicode2EUCW = Buf
End Function
    • good
    • 0
この回答へのお礼

Wendy02さん、ありがとうございます。

表記のとおりにやってみたところ、
%E3%83%86%E3%82%B9%E3%83%88ではなく、
%A5%C6%A5%B9%A5%C8という答えが返ってきました…。
これがEUCということでしょうか。

でも今後、EUCに変換したいときも来ると思いますので、
一度の質問で両方の解決方法ができて助かりました。
ありがとうございました!

お礼日時:2007/08/07 00:31

こんにちは。



JScript の encodeURI 関数を使うとか。

JScript の Vesion 5.5が必要ですが、最近の PC なら特に追加
インストールしなくても大丈夫でしょう。こんな感じ。

' // 文字列を URL エンコード(UTF-8)して返す
Public Function UrlEncode(ByVal sText As String) As String
  If Len(sText) = 0 Then Exit Function
  With CreateObject("ScriptControl")
    .Language = "JScript"
    UrlEncode = .CodeObject.encodeURI(sText)
  End With
End Function

以下は、使い方サンプル。

Sub test()

  Const BASEURL As String = "http://www.google.co.jp/search?hl=ja&ie=UTF-8&q="

  Dim sTemp As String
  
  ' // 実際に UTF-8 でエンコードされたかテスト
  sTemp = UrlEncode(Range("A1").Value)
  ' // B1 セルに UTF-8 でクエリを渡すリンクを貼ってみる
  sTemp = BASEURL & sTemp
  Range("B1").Select
  ActiveSheet.Hyperlinks.Add Anchor:=Selection, _
                Address:=sTemp, _
                TextToDisplay:=sTemp

End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
素人の質問ですみません。
このソースはVBAを立ち上げてコピペかなにかで使用するのでしょうか、
それともJScript用にエディタか何かで記述するのでしょうか…

お礼日時:2007/08/06 22:02

こんにちは。



Alt + F11 -> 挿入->標準モジュール
以下を貼り付けて、
Alt + Q で、VBEditor を閉じます。

Function JIS2UTF(ByVal strText As String)
  'instr,outtype[,intype]
  Dim bobj As Object 'Basp21
  Dim bufArry As Variant
  Dim buf As Variant
  Set bobj = CreateObject("Basp21") 'New Basp21
  Const UTF8 As Long = 5
  With bobj 'CreateObject("Basp21")
    bufArry = .ByteArray(strText)
    buf = .KConv(bufArry, UTF8)
  End With
  JIS2UTF = StrConv(buf, vbUnicode)
  Set bobj = Nothing
End Function

ワークシートで、
=JIS2UTF(A1)

とすれば、UTF-8 に変換されたコードが出てきます。今、HTMLファイルにして、IE で確認した範囲では、たぶん、あっているように思います。Vector などにもツールはあると思いますが、セルに対するものは、このようなプログラムが必要になります。
    • good
    • 0
この回答へのお礼

ご説明ありがとうございます。
上記の内容をエクセルで試してみたところ、

テスト → 繝・せ繝・

という答えが返ってきました。
希望は、
%E3%83%86%E3%82%B9%E3%83%88
という答えなんですが、
やり方がどこか間違っているからでしょうか…

お礼日時:2007/08/06 21:59

こんばんは。



>Bsmtp20070629-587.lzh(119KB)

それは違うものですね。smtp が必要かどうかは分かりませんが、それは、smtp のbugfix版で、今回の内容とはまったく違う内容です。たぶん、それは、元がなければ入れられないような気がします。

Down Load! BASP21-2003-0211.exe (1.44MB) 2003/02/11 Update!

それと、BASP21 が、Vista で動かないという話は聞いていないですね。私のは、Win98からXP まで、このBasp21のKConv で、UTFに変換をしています。これがダメなら、API関数で、VBA作るしかないけれども。
もちろん、Vectorで、変換ツールを探してくるというのも良いはずですが、Excelのセルの文字に対応するということではありませんね。

文字列をUTF-8 に変換
http://www.geocities.co.jp/SilkRoad/4511/vb/utf8 …
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
インストールはできたのですが、そのあとサイトの説明文を見ても、
どうすればExcelに反映できるのかがわかりませんでした。
何度も質問になってしまいすみません…
これはごく普通のExcel利用者がすぐに理解して活用できるでしょうか…
もう少し簡単な方法があるとうれしいのですが…^^;

お礼日時:2007/08/06 01:02

こんにちは。



IE オブジェクトを使ってもよいのですが、個々のセル内の文字を変換するなら、Basp21 のタイプライブラリを使って、

http://www.hi-ho.ne.jp/babaq/basp21.html

KconvFile で、JIS からUTF-8 にコードを変換すればよいと思います。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
早速、ページから、
Bsmtp20070629-587.lzh(119KB) 2007/06/29をダウンロードして、
Bsendm.exeをダブルクリックしてみましたが、
VistaのせいだからかCan't not エラーが出てしまいインストールできませんでした…

お礼日時:2007/08/05 22:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!