Delphi XE5/C++Builder XE5では、TIdURI::URLEncode関数とTIdURI::URLDecode関数の引数が変更されていたので、「URLをエンコード・デコードする」のエントリーを更新した。
TEncodingの代わりにIIdTextEncodingを引数にとるように変更されている。
IIdTextEncodingのインスタンスを取得するには、IdGlobalユニットで定義されている次の関数を使用する。
function IndyTextEncoding_Default: IIdTextEncoding;
function IndyTextEncoding_OSDefault: IIdTextEncoding;
function IndyTextEncoding_8Bit: IIdTextEncoding;
function IndyTextEncoding_ASCII: IIdTextEncoding;
function IndyTextEncoding_UTF16BE: IIdTextEncoding;
function IndyTextEncoding_UTF16LE: IIdTextEncoding;
function IndyTextEncoding_UTF7: IIdTextEncoding;
function IndyTextEncoding_UTF8: IIdTextEncoding;
コードページや文字コード名で取得するときは次の関数を使用する。
function IndyTextEncoding(ACodepage: Word): IIdTextEncoding; overload;
function IndyTextEncoding(const ACharSet: String): IIdTextEncoding; overload;
###C++Builder XE5を使って、文字コードUTF8でURLをエンコードする
#include <IdURI.hpp>
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
###C++Builder XE5を使って、文字コードShift_JISでURLをエンコードする
Shift_JISのコードページは932だからIndyTextEncoding関数の引数に932を渡す。
#include <IdURI.hpp>
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 XE5を使って、文字コードUTF8でURLをデコードする
#include <IdURI.hpp>
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/こんにちは、世界
###C++Builder XE5を使って、文字コードShift_JISでURLをデコードする
Shift_JISのコードページは932だからIndyTextEncoding関数の引数に932を渡す。
#include <IdURI.hpp>
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/こんにちは、世界
> … 引数が変更されていたので、…
よくおぼえていないのですが、TIdURI.ParamsEncode のほうはどうですか?
高橋さん
Indyのソースを見ると以下のようになっています。
—–
XE5 (Indy 10.6.0.5040)
class function ParamsEncode(const ASrc: string; AByteEncoding: IIdTextEncoding = nil {$IFDEF STRING_IS_ANSI}; ASrcEncoding: IIdTextEncoding = nil{$ENDIF}): string;
—–
XE4 (Indy 10.5.8.3)
class function ParamsEncode(const ASrc: string; AByteEncoding: TIdTextEncoding = nil): string;
—–
XE4以前のバージョンのIndyと比較したい場合は、IndyのSVNのソースを見ることである程度は分かるかもしれません。
「XE4 (Indy 10.5.8.3)」
と書きましたが、これはXE2をインストールしてからXE4にアップデートした場合かもしれません。
IndyのSVNを見ると、XE4 RTMには10.6.0がタグ付されているようでした。
TIdURI.ParamsEncodeも引数がTIdTextEncodingがIIdTextEncodingへ変更されていました。