Apidog

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

API設計

APIドキュメント

APIデバッグ

APIモック

API自動テスト

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

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

中村 拓也

中村 拓也

Updated on 11月 12, 2024

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でバックエンドAPI開発の効率をどう向上させるか?チュートリアル

ApidogでバックエンドAPI開発の効率をどう向上させるか?

ApidogはAPI管理の全体的なソリューションを提供し、定義からデバッグ、ドキュメント作成までバックエンド開発を最適化します。プロジェクトの規模に関わらず、開発者が効率的に作業を完了するのを支援します。

中村 拓也

11月 25, 2024

APIテスト効率化:ApidogでのJSONレスポンス管理法チュートリアル

APIテスト効率化:ApidogでのJSONレスポンス管理法

この記事では、ApidogでJSONレスポンスからアサーション設定、変数抽出、JSONパスのコピー方法を解説しました。APIテストの自動化と効率的なレスポンス検証が簡単になり、データの再利用も可能です。Apidogを使い、API機能を確認しましょう。

中村 拓也

11月 20, 2024

ApidogとAlgolia統合で実現する効率的なドキュメント検索チュートリアル

ApidogとAlgolia統合で実現する効率的なドキュメント検索

本記事は、AlgoliaをApidogと統合し、APIドキュメントの検索機能を改善する方法を紹介します。最適な検索設定を維持しながら、情報アクセスの迅速さと効率性を向上させ、ユーザー体験を向上させます。

中村 拓也

11月 19, 2024