• ベストアンサー

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

Excelでセルに入力されている文字列をUTF-8形式にURLエンコードする方法を探しています。 下記のURLでShift-JISにURLエンコードできるものは提供されているのですが、 UTF-8に変換できるものは見つかりませんでした。 。 http://www.vector.co.jp/soft/winnt/net/se369699.html どうぞよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.5

> このソースは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)

kuzumiHK
質問者

お礼

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

その他の回答 (7)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

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=%E3%83%86%E3%82%B9%E3%83%88 http://www.google.co.jp/search?hl=ja&ie=EUC-JP&q=%E3%83%86%E3%82%B9%E3%83%88 ■ %A5%C6%A5%B9%A5%C8 http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=%A5%C6%A5%B9%A5%C8 http://www.google.co.jp/search?hl=ja&ie=EUC-JP&q=%A5%C6%A5%B9%A5%C8 したがって、%E3%83%86%E3%82%B9%E3%83%88 は UTF-8 で URLエンコード されたもので間違いないと思います。

kuzumiHK
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.7

こんにちは。 >表記のとおりにやってみたところ、 >%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 関係だとは思いますが、そのサイトを紹介していただくか、周辺的な詳しい事情が分かれば、少し状況は変わるように思うのですが、今の状況では、私の知っている一般的なコード変換からは、それに到達するのは無理かなって思います。

kuzumiHK
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんばんは。 >希望は、 >%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

kuzumiHK
質問者

お礼

Wendy02さん、ありがとうございます。 表記のとおりにやってみたところ、 %E3%83%86%E3%82%B9%E3%83%88ではなく、 %A5%C6%A5%B9%A5%C8という答えが返ってきました…。 これがEUCということでしょうか。 でも今後、EUCに変換したいときも来ると思いますので、 一度の質問で両方の解決方法ができて助かりました。 ありがとうございました!

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

こんにちは。 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

kuzumiHK
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 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 などにもツールはあると思いますが、セルに対するものは、このようなプログラムが必要になります。

kuzumiHK
質問者

お礼

ご説明ありがとうございます。 上記の内容をエクセルで試してみたところ、 テスト → 繝・せ繝・ という答えが返ってきました。 希望は、 %E3%83%86%E3%82%B9%E3%83%88 という答えなんですが、 やり方がどこか間違っているからでしょうか…

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 >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.htm

kuzumiHK
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 IE オブジェクトを使ってもよいのですが、個々のセル内の文字を変換するなら、Basp21 のタイプライブラリを使って、 http://www.hi-ho.ne.jp/babaq/basp21.html KconvFile で、JIS からUTF-8 にコードを変換すればよいと思います。

kuzumiHK
質問者

お礼

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

関連するQ&A

  • VBでShift_JISへurlエンコードできないでしょうか?

    VB6もしくはVBAですが、 文字列をShift_JISへurlエンコードしたいと思います。 utfやeucは方法があったのですが、Shift_JISに関しては 見つかりませんでした。 よろしくお願いします。

  • UTF-8でのURLエンコード方法

    少し前に質問したのとあまり変わらない内容で恐縮ですが。。。(汗) Jcode.pmをサーバーにインストールし、< http://openlab.ring.gr.jp/Jcode/index-j.html >を参考にしてスクリプトにも組み込みました。 で、以下の命令で日本語をエンコードしてみましたが、Shift-JISに変換されました。(当たり前かもしれませんけど^-^;) $val =~ s/(\W)/'%' . unpack('H2', $1)/eg; UTF-8に変換したいのですが、どのような命令にすれば宜しいのでしょうか。 前回、Jcode.pmを使えというヒントを頂いたので、いけるかなと思い、自分なりにWeb上を調査しましたが力尽きました。(T-T) 宜しくお願いします。

    • ベストアンサー
    • Perl
  • UTF8 URLエンコード

    こんにちわ。 PerlのCGIです。 今までEUCとsjisの変換連打で開発を乗り切って来たのですが、 さすがに古すぎて周りの人が迷惑らしいので、初めてUTF8を使うことになりました。 一応全部UTF8だけで作ろうと思います。 大まかな質問は三つです。 1:   UTF8は可変ビット (バイト単位ではない) の、   ほぼ全ての国際言語対応文字コードと言う認識で合ってますか? 2:   そうなってくると、データの送受信などのURLエンコードは不要ですか?必要ですか? 3:   もしURLエンコードが必要なら、一般に通用する変換方法を教えてください。   ついでなんでデコードの記述もお願いします。 すみませんがよろしくお願いします。

    • 締切済み
    • CGI
  • C++でURLのエンコード

    文字列をShift-JisとUTF-8とEUCにエンコードしたいのですが、エンコードしてくれる関数とかC++でないですかね? やっぱり1バイトずつ調べて自分で変換するしかないのでしょうか? どなたかご教授お願いします。

  • JSPでUTF-8の文字列表示

    JSPでUTF-8の文字列を表示することができず困っています。 HTMLの<form>でPOSTした任意の文字列をjspでUTF-8の文字列に変えたいのですが、 いろいろ試したのですがどうもうまくできません。 jspは全然くわしくないので困ってます。 以下のようなHTMLで <body> <h1 style="background:#cccccc;width:60%">文字コード変換したい文字列を入力</h1> <br> *UTF-8に変換します。 <form method="POST" action="moji2.jsp"> <textarea name="enco" cols="60" rows="7"></textarea> <br /> <input type="submit" value="変換" /> </form> </body> 以下のようなJSPファイルで <%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %> <%@ page import="java.net.*" %> <% request.setCharacterEncoding("Windows-31J"); %> <% String en = request.getParameter("enco"); String ren = URLEncoder.encode(en); %> <%=ren %> となまぁただUTF-8の文字列を表示をする勉強をしていたのですがいろいろかえてもShift_JISでエンコードされた文字列が表示されます。 例)あいうえお で入力すると %82%A0%82%A2%82%A4%82%A6%82%A8 やりたいことはこのサイトと同じことなんです http://www.tagindex.com/tool/url.html 例)あいうえお %e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a 最終目標は任意の文字列をUTF-8に変換して、ヤフーの形態素解析をすることです。初心者ですがよろしくお願いします。。

    • ベストアンサー
    • Java
  • 掲示板に携帯から書き込むとURLエンコード

    PHPを使って掲示板を作成しています。 UTF-8でPHPファイルを作成し、UTF-8のテキストファイルにログをためていく感じで作っています。 PCでは、だいたい正常に動くようになったのですが、携帯電話(au/W61S)からの投稿を試してみたところ、投稿結果がURLエンコードの状態になってしまいました。。。 %82%c6%82%a4%82%b1%82%a4%82%c4%82%b7%82%c6 さらにシフトJISでエンコードされているようでしたので、自分のつたない知識を総動員して、以下のような処理をさせることでなんとか形にはなったのですが、かなり処理としては乱暴な気がしています。 携帯電話からの投稿というのは、URLエンコードとして受け取るしかないのでしょうか(auでしか試していないため、他のキャリアだと別の問題が発生するのでしょうか?) また、下記の方法よりももっとスマートに携帯からの投稿を、表示できる文字列に変換する方法をご存じの方がいらっしゃいましたら、ご教授いただければ幸いです。 よろしくお願いいたします。 <?php //フォーム内に入力された文字列を取得 $test = $_GET['formtxt']; //先頭の文字を抽出 $firsttxt = substr($test,0,1); //先頭の文字列が%であれば、URLデコードを行い、シフトJISからUTF-8に変換する if($firsttxt == "%"){ $test = urldecode($test); $test = mb_convert_encoding($test,'UTF-8','SJIS'); } ?>

    • 締切済み
    • PHP
  • Shift-jisのPerlから、UTF-8、EUC、Shift-jisの3つのエンコードテキストを生成

    Shift-jisで作ったPerlにて、テキストをEUC、UTF-8、Shift-jisにエンコードし外部検索サイト等にテキストリンクを飛ばしたいのですが、うまくいきません。 過去ログにUTF-8から、EUC、UTF-8、Shift-jisへのエンコード方法をみつけ http://oshiete1.goo.ne.jp/qa3745875.html 試行錯誤しましたが、Shift-jisからはうまくいきませんでした。 perl のバージョンは5.8.8です。 ご教示のほどよろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字エンコードについて

    Blogの更新をPHPで挑戦してみたのですが、文字化けしちゃって訳がわかりません… PHPのバージョンは5.1.6.6でバッチファイルを使用してます。 色々調べてみた結果Blogの方の文字コードがShift_JISみたいなので (PHPは基本UTF-8ですよね?) mb_convert_encodingかmb_convert_variablesの関数かなと思って使用してみたのですが結果はエラーがおきてしまい↓↓どうしていいのか分かりません、、 mb_convert_encoding(変換したい文字列, "SJIS", "auto"); mb_convert_variables("JIS", "UTF-8", 変換したい文字列); autoのところをUTF-8にしてもおなじでした… もちろん一つずつ試しました。 どなたかいい解決方法を教えて頂けませんか?

    • 締切済み
    • PHP
  • 文字エンコードの種類

    ホームページを制作する時、 <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> みたいな宣言すると思うんですけど、 種類がshift-JIS とか utf-8 とか EUC-JPとか色々ありますが、 いったいどれを指定するといいのでしょうか? 今まではshift-JISを使ってきたのですが、 大手ポータルサイトを見てみると、utf-8が多いようですね。 こういうページ↓ http://mikeneko.creator.club.ne.jp/~lab/kcode/encode.html も見てみたんですが、どのエンコードが一般的なのかよく分からなくて(^^;) 一般論として教えてください!

    • ベストアンサー
    • HTML
  • UTF-8 コードでのmailtoの文字化け

    HPをつくったのですが、(HTMLのエンコードはUTF-8です。) mailtoにsubjectを追記してメールフォームを作成しました。ですが、件名のところがどうしても文字化けしてしまうので、文字をエンコードしたものを貼り付けて何とか対応しました。しかし、ウィンドウズXPまでの古いブラウザでは大丈夫なものの、VISTAでは文字化けしてしまうようです。 どうしてこうなってしまうのでしょうか?outlookなどのバージョンの問題なのでしょうか?それともOS? わかりません。理由をご存知の方、また解決策をご存知の方、どうぞ教えてください。 あと、こんなこと問題外といわれるかもしれませんが、UTF-8を単純にShift-JISに置換したのですが、レイアウトとうすべてがぐちゃぐちゃになってしまいました。たくさんのページをUTF-8からShift-JISに変換しても良い方法というのはないのでしょうか?この点も併せて回答お願いいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう