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

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

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

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

文字コード

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

Python

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

Q&A

解決済

1回答

2711閲覧

Pythonで日本語を使うときにおこる問題

keikunihiro

総合スコア0

Unicode

Unicodeはエンコーディングの標準規格です。1つの文字コード体系で多国語の表現を可能にすることを目指して作られています。

文字コード

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

Python

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

0グッド

0クリップ

投稿2020/04/28 08:59

現在,RaspberryPiを使って音声合成で喋らせるためにOpen JTalkをインストールしました。セットアップもうまくいき、./jtalk.sh "こんにちは。ラズベリーパイが喋っていますよ"のコマンドで喋らすことができました。
次に、Pythonで現在の日時を喋るプログラムについて下記サイトを参考にして学んでいます。

参考サイト:https://qiita.com/kkoba84/items/b828229c374a249965a9

以下に今実行しているプログラムを示します。

#!/usr/bin/env python

coding: utf-8 import time

import subprocess from datetime
import datetime
def jtalk(t):
open_jtalk=['open_jtalk']
mech=['-x','/var/lib/mecab/dic/open-jtalk/naist-jdic']
htsvoice=['-m','/usr/share/hts-voice/mei/mei_normal.htsvoice']
speed=['-r','1.0']
outwav=['-ow','open_jtalk.wav']
cmd=open_jtalk+mech+htsvoice+speed+outwav
c = subprocess.Popen(cmd,stdin=subprocess.PIPE)
c.stdin.write(t.encode())
c.stdin.close()
c.wait()
aplay = ['aplay','-q','open_jtalk.wav']
wr = subprocess.Popen(aplay)

def say_datetime():
d = datetime.now()
text = '%s%s%s%s%s' % (d.month, d.day, d.hour, d.minute, d.second)
jtalk(text)
if name == 'main': say_datetime()

このプログラムの下から4行目の text = ・・・・ の部分に月,時等の日本語を入れた状態

text = '%s月%s日%s時%s分%s秒' % (d.month, d.day, d.hour, d.minute, d.second)

で,Thonny Python IDEのRunボタンを押すと問題なく実行され,日時が読み上げられます.しかしながら,ターミナル上で

jtalk2.py python

として実行しようとすると,

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-10: ordinal not in range(128)
や WARNING: JPCommonLabel_make() in jcomon_label.c: No phoneme. Error: waveform cannot be synthesized.
といったエラーが出てきて実行できません.ネット上でUnicodeEncodeError等について調べ,日本語の入った文字の頭に’u’をつけたり、sys.stdout = codecs.getwriter('utf_8')(sys.stdout)をプログラムに入れたりなど、色々と試しましたが同じ状況が続き,解決できません.この件につきまして,分かる方がいましたらアドバイス頂けませんでしょうか.よろしくお願いいたします.

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

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

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

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

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

y_waiwai

2020/04/28 09:01

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
meg_

2020/04/28 09:03

念のための確認ですが、pyファイルはutf-8で保存してますよね?
keikunihiro

2020/04/28 09:25

枠の中にコードを張り付けました。お願いします。
keikunihiro

2020/04/28 09:28

最近はじめたため、しっかり理解できていませんが、おそらくutf-8で保存できていると思われます。
meg_

2020/04/28 09:39

・残念ながら正しくコードは貼れてませんね。 ・「おそらく」では駄目なのでutf-8で保存してください。(コードは何で書いていますか? エディタ?IDE?)
tiitoi

2020/04/28 09:40

先頭に # -*- coding: utf-8 -*- をつけてみてはどうでしょうか
keikunihiro

2020/04/28 11:03

エディタです。ターミナルでpythonで動かしていたのをpython3で動かしたらうまく実行できました。ありがとうございました。
keikunihiro

2020/04/28 11:04

# -*- coding: utf-8 -*-をつけてみてpython3で動かしたら実行しました。アドバイスありがとうございます。
guest

回答1

0

自己解決

ターミナルでpythonで動かしていたところ、python3で動かしたら実行しました。

投稿2020/04/28 11:06

keikunihiro

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問