日本語をURLエンコードする関数ありますか

[戻る]
らら 2007/07/20(金) 18:45:44
度々お世話になっております。

Webのキーワードにときどきある
日本語を%付の文字列(UTF-8)にエンコードしたいのですが
JavaScriptには、encodeURIComponent()とかいう
便利な関数が用意されているっぽいのですが、
VCには、そのようなものはありますでしょうか?

例)「あ」 → %E3%81%82

VC6またはVC8を使っています。
よろしくお願い致します。

Blue 2007/07/20(金) 18:50:25
過去ログ
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200504/05040001.txt

2007/07/20(金) 22:13:57
今回はUTF-8と言う条件なので、少し注意する必要があるような。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200012/
00120027.txt
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200208/
02080108.txt
あたりも読んでおくといいかもしれません

らら 2007/07/21(土) 12:37:05
いつもありがとうございます。
昨日もWebでいろいろさがしてみたつもりだったのですが、
Blueさんの教えていただいたキーワードににUTF-8を加え、
URL エンコード C言語 UTF-8のキーワードで検索したところ
(なぜか)VBのサンプルソースみつけましたので、
Cに書き直して実験してみます。

麩さんに紹介していただいたスレッドは
「古いスレッドには・・・」で見れなかったです。すみません。

Cに書き直しで上手くいきましたら報告がてら「解決」つけます!

RAPT [HomePage] 2007/07/21(土) 13:14:48
>麩さんに紹介していただいたスレッドは
>「古いスレッドには・・・」で見れなかったです。すみません。
見れましたよ。リンクが改行で切れているので、その下に続く.txtまでをアドレスバー
にコピペしましょう。

らら 2007/07/21(土) 13:21:37
おぉ!見れました。ありがとうございます。
とっても参考になりそうです。

らら 2007/07/21(土) 14:04:25
[[解決]]
ありがとうございます! できました!
過去スレ紹介していただいた SJIS → UTF-8
の変換さえ出来れば、あとは強引に文字コードを
文字列にして頭に%つけてみることにしました。

過去スレにありました、
MultiByteToWideChar()とWideCharToMultiByte()を使ったやりかたでも、
てつさんが自前で書いた CString SJIStoUTF8(LPCSTR lpszSJis)
の方法でもどちらでも上手く行きました。

上記変換関数を使わせてもらって、
SJIS文字列→UTF-8のURLエンコード文字列をした
とりあえず、それらしいプログラムが以下です。
(文字コードが1桁のものがあった場合に、0をつけて2桁表記に
するのが正しいのかどうかは、調べ不足ですが。すみません)

CString URLEncodeUTF8( LPCTSTR lpszSJis )
{
    CString strRes;
    CString strUtf8;
    CString tmp;
    int    i,len;

    CString SJIStoUTF8(LPCSTR lpszSJis);

    strUtf8 = SJIStoUTF8(lpszSJis);
    len = strUtf8.GetLength();
    for ( i=0; i<len; i++ )
    {
        tmp.Format("%%%02x", (strUtf8[i] & 0xff) );
        tmp.MakeUpper();
        strRes += tmp;
    }
    return strRes;
}

ありがとうございました!

シュウ 2007/07/21(土) 22:34:08
解決していますが指摘を。

        tmp.Format("%%%02x", (strUtf8[i] & 0xff) );
        tmp.MakeUpper();

        ↓

        tmp.Format("%%%02X", (strUtf8[i] & 0xff) );

今回は日本語をということですが、以下の文字はエンコードしませんので注意が必要で
す。

アルファベット、数字(isalnum)
'-'
'_'
'.'
'*'

また、半角スペースは'+'にします。

らら 2007/07/23(月) 12:21:09
なるほどですね。シュウさん、ありがとうございます!

古いスレッドには追加発言できません。