Apidog

オールインワンのAPI開発プラットフォーム

API設計

API仕様書生成

APIデバッグ

API Mock

APIテスト自動化

無料登録
Home / 操作ガイド / cURLとutf-8:エンコードとデコードを解説

cURLとutf-8:エンコードとデコードを解説

cURLを利用してAPIをテストする時に、たまに文字コードをUTF-8に指定する必要もあり、レスポンスで\uを先頭にされているUTF-8コードが表示されることがあります。このような場合、UTF-8文字コードのエンドコードとデコードが必要な作業になります。本文では、これらの対策について皆さんに紹介します。

UTF-8(Unicode Transformation Format - 8-bit)は、文字エンコーディングの一種で、Unicode文字集合を可変長で表現する形式です。UTF-8は、最も汎用性の高い文字コードとして、様々な領域で利用されています。cURLを利用してAPIをテストする時に、たまに文字コードをUTF-8に指定する必要もあり、レスポンスで\uを先頭にされているUTF-8コードが表示されることがあります。このような場合、UTF-8文字コードのエンドコードとデコードが必要な作業になります。本文では、これらの対策について皆さんに紹介します。

cURLとUTF-8について

cURLはHTTP通信を扱うツールですが、リクエストやレスポンスのエンコードとしてUTF-8をデフォルトで想定しています。しかしながら、文字化けを防ぐためにいくつかのオプション設定が必要です。特にレスポンスデータの文字コード自動判定を無効化する-asciiオプションが大切です。

また、POSTデータなどクライアントから送信するデータは適切にUTF-8でエンコードする必要があります。送信用のデータ変換には注意が必要です。

cURLでエンコーディングをUTF-8に設定

curlでUTF-8の文字を適切に扱うためには、主に以下の2つのことが重要です。

ステップ⒈リクエストのエンコーディングをUTF-8に設定する

curl -H "Content-Type: application/json; charset=utf-8" http://example.com

上記のようにヘッダーでcharset=utf-8を指定します。

ステップ⒉文字コードの自動検出を無効にする

curlはデフォルトでサーバーからのレスポンスの文字コードを自動検出しますが、検出した文字コードで表示されてしまうと文字化けすることがあります。

このため-ASCIIオプションを使用して自動検出を無効にし、レスポンスをUTF-8として扱うようにします。

curl -H "Content-Type: application/json" -H "Accept: application/json" -ASCII http://example.com

このように設定しておくことで、リクエスト、レスポンスともにUTF-8で適切に扱えるようになります。curlだけでなく、Unicodeをサポートしている他のツールとの組み合わせなどで、文字化けが発生する場合はこの2つの設定を確認することをおすすめします。

cURLで取得したUTF-8のレスポンスを日本語にデコード

また、cURLコマンドでリクエストを送信すると、取得するレスポンスが\uを先頭にされているUTF-8コードが表示されることがあります。例えば、APIエンドポイントは政府統計の総合窓口(e-Stat)のAPIを例にします:

$ curl -X GET -H 'Content-Type:application/json;charset=utf-8' http://api.e-stat.go.jp/rest/3.0/app/json/getStatsList?appId=error

このリクエストでは、appId値をerrorに設定するので、エラーメッセージが返してくるのが想定できますね。しかし、実際にcURLコマンドを使ってリクエストを送信すると、次のレスポンスが返されます:

{"GET_STATS_LIST":{"RESULT":{"STATUS":100,"ERROR_MSG":"\u8A8D\u8A3C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u30A2\u30D7\u30EA\u30B1\u30FC\u30B7\u30E7\u30F3ID\u3092\u78BA\u8A8D\u3057\u3066\u4E0B\u3055\u3044\u3002","DATE":"2023-12-04T16:20:46.399+09:00"},"PARAMETER":{"DATA_FORMAT":"J"}}}%   

参照元:https://qiita.com/ponsuke0531/items/9f798a9193a347266ff7

このように、元々読み解けるエラーメッセージのテキストが返されることを期待しますが、\uから始めて全然理解できないUTF-8コードを変えてしまいましたね。このような場合はどうしたらいいですか?

button

Apidogでレスポンスを自動的にデコードする

一部のサーバーの設定により、返されたレスポンスのデータがUTF-8文字コードで表示されることがあります。このような場合は、どうやってそれを人間で読めるテキストに変換すればいいですか?実際には、curlでそんなに頑張らなくても良いのでしょう。

Apidogは、非常に使いやすいAPI管理ツールとして、UTF-8を含む様々な文字エンコーディングにも対応できます。つまり、レスポンスから返されるレスポンスは、UTF-8文字コードであっても、Apidogはそれを人間が理解できるテキストに自動変換できますので、非常に便利です。

同じく政府統計の総合窓口(e-Stat)のAPIを呼び出そうとします。

ApidogはUTF-8を自動変換

上記の写真が示すように、cURLで返されたレスポンスのUTF-8文字コードが全部綺麗な日本語になりました。

まとめ

Apidogは、APIのテストや管理を支援するツールで、とても使いやすいインターフェースを提供しています。中でも、UTF-8の文字コードへの対応が大きな特徴といえるでしょう。例えば、政府統計のAPIをcURLで呼び出した場合、しばしばレスポンスがUTF-8の文字コードで返ってきます。これは人間には理解できない文字列になってしまいます。ところが、Apidogを使えば、このUTF-8の文字列を自動的に適切な日本語の文字列に変換してくれるのです。

つまり、面倒な文字コードの変換を全てApidogに任せることができるわけです。cURL単体では文字化けに対処するのは大変ですが、Apidogを併用することで、とても簡単にUTF-8のデータを扱えるようになるのです。

button

Apidogのニュースレターを購読する

今すぐ購読すると、いつでもApidogから更新情報と最新観点を手に入れることができます。