URLをエンコード・デコードする機能は、HTTPAppユニットで提供されています。
文字コードのエンコーディングは指定できません。
#include <HTTPApp.hpp>
URLをエンコードにはHTTPEncode、デコードにはHTTPDecodeを使います。
//URLのエンコード
UnicodeString ret = HTTPEncode("こんにちは、世界");
// ret = "%82%B1%82%F1%82%C9%82%BF%82%CD%81A%90%A2%8AE"
//URLのデコード
UnicodeString ret = HTTPDecode("%82%B1%82%F1%82%C9%82%BF%82%CD%81A%90%A2%8AE");
// ret = "こんにちは、世界"
URLをエンコード・デコードする機能は、IdURIユニットで提供されています。
#include <IdURI.hpp>
URLをエンコードにはTIdURI::URLEncode関数やTIdURI::ParamsEncode関数、デコードにはTIdURI::URLDecode関数を使います。
TIdURI::URLEncode関数は、第一引数にはエンコードする完全なURI、第二引数には文字コードのエンコーディングを指定します。
//UTF-8でエンコードする例
UnicodeString uri = TIdURI::URLEncode(
"http://www.example.com/こんにちは、世界",
IndyTextEncoding_UTF8());
//=> uri = http://www.example.com/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E4%B8%96%E7%95%8C
//Shift_JISでエンコードする例
UnicodeString uri = TIdURI::URLEncode(
"http://www.example.com/こんにちは、世界",
IndyTextEncoding(932));
//=> uri = http://www.example.com/%82%B1%82%F1%82%C9%82%BF%82%CD%81%41%90%A2%8A%45
C++Builder XE3以前でエンコードするときは次のように記述します。
//UTF-8でエンコードする例
UnicodeString uri = TIdURI::URLEncode(
"http://www.example.com/こんにちは、世界",
TEncoding::UTF8);
//=> uri = http://www.example.com/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E4%B8%96%E7%95%8C
//Shift_JISでエンコードする例
TEncoding* sjis = TEncoding::GetEncoding(932);
UnicodeString uri = TIdURI::URLEncode(
"http://www.example.com/こんにちは、世界",
sjis));
delete sjis;
//=> uri = http://www.example.com/%82%B1%82%F1%82%C9%82%BF%82%CD%81%41%90%A2%8A%45
TIdURI::ParamsEncode関数は、第一引数にエンコードする問い合わせ文字列、第二引数には文字コードのエンコーディングを指定します。
//UTF-8でエンコードする例
UnicodeString uri = TIdURI::ParamsEncode(
"こんにちは、世界",
IndyTextEncoding_UTF8());
//=> uri = %E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E4%B8%96%E7%95%8C
//Shift_JISでエンコードする例
UnicodeString uri = TIdURI::ParamsEncode(
"こんにちは、世界",
IndyTextEncoding(932));
//=> uri = %82%B1%82%F1%82%C9%82%BF%82%CD%81%41%90%A2%8A%45
TIdURI::URLEncode関数は、第一引数にはデコードする完全なURI、第二引数には文字コードのエンコーディングを指定します。
//UTF-8でデコードする例
UnicodeString uri = TIdURI::URLDecode(
"http://www.example.com/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E4%B8%96%E7%95%8C",
IndyTextEncoding_UTF8());
//=> uri = http://www.example.com/こんにちは、世界
//Shift_JISでデコードする例
UnicodeString uri = TIdURI::URLDecode(
"http://www.example.com/%82%B1%82%F1%82%C9%82%BF%82%CD%81%41%90%A2%8A%45",
IndyTextEncoding(932));
//=> uri = http://www.example.com/こんにちは、世界
C++Builder XE3以前でデコードするときは次のように記述します。
//UTF-8でデコードする例
UnicodeString uri = TIdURI::URLDecode(
"http://www.example.com/%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E4%B8%96%E7%95%8C",
TEncoding::UTF8))
//=> uri = http://www.example.com/こんにちは、世界
//Shift_JISでデコードする例
TEncoding* sjis = TEncoding::GetEncoding(932);
UnicodeString uri = TIdURI::URLDecode(
"http://www.example.com/%82%B1%82%F1%82%C9%82%BF%82%CD%81%41%90%A2%8A%45",
sjis);
delete sjis;
//=> uri = http://www.example.com/こんにちは、世界