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

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

新規登録して質問してみよう
ただいま回答率
85.41%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

Q&A

1回答

305閲覧

(raspberry pi pico W )日本語が使えない、LINE API に日本語出力ができない

nihonnnoheso

総合スコア6

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

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

0グッド

1クリップ

投稿2024/05/02 03:17

編集2024/05/06 06:59

実現したいこと

私は、ラズパイpicoW を用いた、
「センサーから反応があったらLINE APIよりメッセージを送る」
というプログラムを作成しましたが、
「その文章を日本語にしてほしい」という問題の解決ができない状態です

import machine,time, os, sys, network, urequests, codecs from utime import sleep from ssid import SSID, PASS(家のwifiのssid) wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(SSID, PASS) line_header = { 'Content-Type' : 'application/x-www-form-urlencoded', 'Authorization': 'Bearer' + ' ' + 'XXXLINE APIのコードXX' } line_message = 'message=' + 'aiueo_あいうえお' response = urequests.post('https://notify-api.line.me/api/notify', headers = line_header, data = line_message) response.close() print(line_message)

イメージ説明

発生している問題・分からないこと

調べた結果、LINEAPIは「utf_8」という文字でしか動作しないこと、
raspberry pi pico W はデフォルトで「utf_8」であるが、新たに設定をし直さなければならないと判断しました

情報源は以下になります
https://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/encoding.html

raspberry pi pico W は素の状態ではcodecsがimport できないので、
thonnyのパッケージを追加でmicropython-codecsをインポート
そのうえで
https://osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/encoding.html
より、サンプルプログラムを流しました

以下のようなエラーが発生します

>>> %Run -c $EDITOR_CONTENT Traceback (most recent call last): File "<stdin>", line 6, in <module> AttributeError: 'module' object has no attribute 'getwriter' >>>

該当のソースコード

#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import codecs sys.stdout = codecs.getwriter('utf_8')(sys.stdout) print('line_message')

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

どこを調べても、
「getwiter」を入力したらエラーが出た、だなんて結果は出ません

サンプルプログラムをそのままコピペしても動かないのであれば、それは環境のせいだと思うのですが、
thonnyのパッケージを追加の中には「getwriter」というものはありません

補足

そもそも、LINE APIで日本語入力する方法は、
「文字をutf_8に変換する」で会っているでしょうか?
全部が全部文字化けされることではなく、最初の三文字だけはちゃんと日本語が出力されるのですが

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

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

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

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

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

ikedas

2024/05/03 12:37

> raspberry pi pico W はデフォルトで「utf_8」であるが、新たに設定をし直さなければならないと判断しました 判断の根拠を記してください。また、判断にあたって参考にした資料などがあればそのURLを記してください。 ちなみに、このコメント欄に書くのではありません。質問文を編集して書いてください。
bsdfan

2024/05/03 16:02

> 全部が全部文字化けされることではなく、最初の三文字だけはちゃんと日本語が出力されるのですが このときのコードと結果を追記できますか? (codecsモジュール云々をがんばっても、本来やりたいはずのLINE APIで日本語出力ということに繋がらない可能性があります)
ikedas

2024/05/06 11:30

コデックの件について根拠として示されたものはいずれもLINE APIについて述べてはいないようです。
guest

回答1

0

codecsは関係なさそうです。


urequests はrequestsのmicroPython用サブセットなのだということで、API (ここではLINEのではなくPythonライブラリのAPIのこと) はほぼ互換性があるものと思われます。

requests.post()のドキュメントを見ると、引数dataについては

  • data – (optional) Dictionary, list of tuples, bytes, or file-like object to send in the body of the Request.

とあり、文字列以外のものも指定することができます。文字列以外のものを指定した場合にどのように扱われるか明確に記してありませんが、上記のpostは低レベルインタフェースrequests.Requestのラッパーでしょうからそちらを見ると

  • data – the body to attach to the request. If a dictionary or list of tuples [(key, value)] is provided, form-encoding will take place.

とあります。dataに辞書やタプルを渡した場合にはform-encoding (パーセントエンコーディング。俗にURLエンコーディングとも) が行われるとのことなので、反対解釈としてdataにそれ以外のもの、例えば文字列を渡した場合にはエンコーディングなどされずそのまま送出されると読めます。

したがって、dataに文字列を渡すのであればapplication/x-www-form-urlendodedの仕様に従って自分でデータをパーセントエンコーディングすればよいと考えられます。一方、辞書やタプルを渡せば自分でエンコーディングしなくてよくなるのではないかとも考えられます。

もっとも以上はサブセットではなくフルセットのrequestsのAPI仕様に基づく推測なので、urequestsで実際にどうなるかはお試しください (私はすぐ試せる環境がいので)。

投稿2024/05/06 12:29

編集2024/05/06 12:34
ikedas

総合スコア4434

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

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

nihonnnoheso

2024/05/06 12:44

ありがとうございます! 明日、試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.41%

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

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

質問する

関連した質問