日本語をURLエンコードする関数ありますか – プログラミング – Home

日本語をURLエンコードする関数ありま...
 
通知
すべてクリア

[解決済] 日本語をURLエンコードする関数ありますか


らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
Topic starter  

度々お世話になっております。

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

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

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


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467

返信引用
麩
 麩
(@麩)
ゲスト
結合: 17年前
投稿: 95
 

今回は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
あたりも読んでおくといいかもしれません


返信引用
らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
Topic starter  

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

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

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


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 310
 

>麩さんに紹介していただいたスレッドは
>「古いスレッドには・・・」で見れなかったです。すみません。
見れましたよ。リンクが改行で切れているので、その下に続く.txtまでをアドレスバー
にコピペしましょう。


返信引用
らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
Topic starter  

おぉ!見れました。ありがとうございます。
とっても参考になりそうです。


返信引用
らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
Topic starter  

ありがとうございます! できました!
過去スレ紹介していただいた 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;
}

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


返信引用
シュウ
 シュウ
(@シュウ)
ゲスト
結合: 22年前
投稿: 43
 

解決していますが指摘を。

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

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

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

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

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


返信引用
らら
 らら
(@らら)
ゲスト
結合: 22年前
投稿: 93
Topic starter  

なるほどですね。シュウさん、ありがとうございます!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました