質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1292閲覧

【Python】ChatWorkAPIで取得した文字のエンコード

Kirby2000

総合スコア24

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/01/09 21:41

Pythonを使ってChatWorkAPIを使おうとしています。
プログラムは下記のとおりです。

result = requests.get(get_messages_url, headers={"X-ChatWorkToken": "xxx",}) result.encoding = 'Shift_JIS' print(result.text)

取得した値を見てみると下記のようにユニコード文字になっています。

\u308c\u3066\u3044

エンコードの問題だと思いUTF-8、UTF-16、Shift_JIS、ISO-2022-JP、EUC-JP、ASCIIなどを試してみたのですが、どれも日本語にはなりませんでした。

result.encoding = 'Shift_JIS'

こちらのサイトの上から二段目のボックス(\uXXXX)に入れるとPlain textには日本語が表示されます。

これは一体何でエンコードすればよいのでしょうか?
分かる方がおられましたらお力を貸していただければと思います。

どうぞよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/01/10 01:00 編集

確認ですが本当は "\u308c\u3066\u3044" だったり [ { "message_id": "5", "account": { "account_id": 123, "name": "Bob", "avatar_image_url": "https://example.com/ico_avatar.png" }, "body": "\u308c\u3066\u3044", "send_time": 1384242850, "update_time": 0 } ] と出力されているのに「この部分は要らないだろう」と自分で判断して、省いて引用している なんてことはないてすよね?
Kirby2000

2020/01/10 05:56 編集

ご指摘ありがとうございます。 そのとおりです。ユニコード文字になっている部分だけ抜粋しておりました。 よく見ると返ってきている値はJson形式でした。 result.json() したところ正常に表示されました。 ありがとうございます。
quickquip

2020/01/10 05:59

これだと自分で回答を書いて解決済みにするのがいいかと思います。
Kirby2000

2020/01/10 06:15

ありがとうございます。 回答を追加し解決済みにしました。
guest

回答3

0

自己解決

JSONで返ってきていた値を一部だけ見て全体にエンコードが必要だと思ったのが間違いでした。

ユニコードになっていたのは返ってきた値のbodyの部分だけでした。
result.json() とすることでエンコードする必要もなく問題なく表示されました。

ソースコードは下記のとおりです。

import requests BASE_URL = 'https://api.chatwork.com/v2/' if __name__ == '__main__': get_messages = f'{BASE_URL}rooms/{room_id}/messages?force=1' result = requests.get(get_messages, headers={ "X-ChatWorkToken": "xxxxx", }) print(result.json())

同じところでつまずいてしまった方の参考になれば幸いです。

投稿2020/01/10 06:14

編集2020/01/10 07:19
Kirby2000

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

下記のようにユニコード文字になっています

はい、その通りだと思います。

python

1print( type( result.text ) ) 2# <class 'str'>

とのことなので、エンコードされていないunicodeだと思います。

これは一体何でエンコードすればよいのでしょうか?

result.text.encode('utf-8')などと、出力したい文字コードにエンコードすればいいのではないでしょうか。出力先の要件を確認してみてはいかがでしょうか。

投稿2020/01/10 00:57

Lhankor_Mhy

総合スコア36074

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kirby2000

2020/01/10 05:57

回答ありがとうございます。 result.json() で正常に表示されました。
Lhankor_Mhy

2020/01/10 06:23

JSONの文字コードはUTF-8と決められていますからね。
guest

0

グリフウィキというサイトで検索しましたが、Unicodeっぽいですね。
u3044はUnicodeで、「い」と出てますね。

投稿2020/01/10 00:47

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kirby2000

2020/01/10 05:57

回答ありがとうございます。 result.json() で正常に表示されました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問