Top / Programming / C++Builder / URLをエンコード・デコードする

URLをエンコード・デコードする

HTTPAppユニット

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 = "こんにちは、世界"

IdURIユニット

URLをエンコード・デコードする機能は、IdURIユニットで提供されています。

#include <IdURI.hpp>

URLをエンコードにはTIdURI::URLEncode関数やTIdURI::ParamsEncode関数、デコードにはTIdURI::URLDecode関数を使います。

TIdURI::URLEncode関数でエンコード

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関数でエンコード

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::URLDecode関数でデコード

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/こんにちは、世界

更新履歴