テキストファイルを音声ファイルに転換するプログラムを組んでいます。
Python
1from gtts import gTTS 2import os 3import tkinter as tk 4from playsound import playsound 5from tkinter import filedialog 6 7win = tk.Tk() 8 9def chooseFile(): 10 global content 11 file = filedialog.askopenfile(filetypes =[('Text Files','*.txt')]) 12 sFile = tk.Label(win,text=f"Selected File : {file.name}") 13 sFile.grid(row=1, column=0, columnspan=2) 14 if file is not None: 15 content = file.read() 16 return content 17 18def convert(): 19 text = content 20 speech = gTTS(text=content, lang="ja") 21 speech.save(r'C:\Users\detec\Desktop\speech.mp3') 22 playsound(r'C:\Users\detec\Desktop\speech.mp3') 23 24label = tk.Label(win,text="Select File") 25label.grid(row=0, column=0, padx=8, pady=8) 26 27button = tk.Button(win,text="Choose!!",command=chooseFile) 28button.grid(row=0,column=1,padx=8,pady=8) 29 30button2 = tk.Button(win,text="Convert", command=convert) 31button.grid(row=2,column=1,columnspan=2,padx=8,pady=8) 32 33win.mainloop()
エラー文に 'cp932' codec can't decode byte 0x81 in position 10: illegal multibyte sequenceが出たのでspeech.saveの文末にencoding="utf-8"を入れましたが、やはり同様のエラーが。
どこに入れれば読み取ってくれますか??
エラー全文です
Traceback (most recent call last): File "C:\Users\detec\Anaconda3\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "audio.py", line 15, in chooseFile content = file.read() UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 10: illegal multibyte sequence
from gtts import gTTS import os import tkinter as tk from playsound import playsound from tkinter import filedialog win = tk.Tk() def chooseFile(): global content file = filedialog.askopenfile(filetypes =[('Text Files','*.txt')]) sFile = tk.Label(win,text=f"Selected File : {file.name}") sFile.grid(row=1, column=0, columnspan=2) if file is not None: content = file.read() return content def convert(): text = content speech = gTTS(text=content, lang="ja") speech.save(r'C:\Users\detec\Desktop\speech.mp3', encoding="shift-jis") playsound(r'C:\Users\detec\Desktop\speech.mp3', encoding="shift-jis") label = tk.Label(win,text="Select File") label.grid(row=0, column=0, padx=8, pady=8) button = tk.Button(win,text="Choose!!",command=chooseFile) button.grid(row=0,column=1,padx=8,pady=8) button2 = tk.Button(win,text="Convert", command=convert) button.grid(row=2,column=1,columnspan=2,padx=8,pady=8) win.mainloop()
同様のエラー、ではなく、エラーメッセージをそのままコピペで提示しましょう
cp932' codec can't decode byte 0x81 in position 10: illegal multibyte sequenceです
> speech.saveの文末にencoding="utf-8"を入れました
とのことですが、エラー発生しているのはそこではないのではないですか?
エラー全文提示いただけると、回答が得やすいと思います。
追加しました。
テキストファイルの文字コードは何ですか?
メモ帳を使用しているのでUTF-8かと思います。
cp932のテキストを読み込ませると、どうなりますか?
写真のまま停止します。
エラーは起きないのですね。
やはり文字コードが違うのではないでしょうか?
しかしPythonでencodingしているので違うということはないと思うのですが・・・
ご提示のコードを拝見する限り、encodingを指定している部分が見当たりませんでした。
こういうことですか?
先ほど私が申したのは、Pythonでshift-jisに指定したメモ帳に”w”しているということです。
今回のコードはエラーがなく、実行不可なので意味が分かりません。
「Pythonでshift-jisに指定したメモ帳に”w”している」とのことですが、
・別のPythonコードがあり、そのコードでcp932のテキストファイルを作成している。
・上記テキストファイルを、ご提示のコードで読み込ませている。
・だから、cp932のテキストであるはずだ。
というご主張だという理解で合っていますか?
文字コードの確認の仕方がお分かりでないようでしたら、こちらをお試しになってはいかがですか?
https://kazo9.net/win-memo-check
当方の環境で、ご提示のコードのテキスト読み込み部分を試してみましたが、UTF-8でエラー、cp932で問題なく動作しました。
情報が不足しているので何とも言えませんが、おそらく、Dr.Kさんがcp932だと思っているテキストファイルの文字コードがUTF-8なのではないかな、と推測しています。
ありがとうございます。
貼ってくださったHPを見て、確認するとやはりUTF-8でした。
保存の時にANSIに設定して保存してもやはり動作しません。
windowsを使っているのですが、どのようにcp932で保存すればよいですか?
>保存の時にANSIに設定して保存してもやはり動作しません。
>どのようにcp932で保存すればよいですか?
2020/06/03 12:36 ~ 2020/06/03 14:10 のやりとりでは、cp932ではエラーが出ていない、ということだったと思うのですが、その際のcp932ファイルはどのように準備されたのですか?
お伝えの方法が悪くて申し訳ございません。
エラー文が出ないのは間違いありませんでした。読み込んで動作が止まってします。表示も出力もなく微動だにしないという意味です。そして私がcp932だと信じていたものはUTF-8だったのでcp932のファイルでは試していなかったことになります。そのため、今回試すために作成する必要があるのですが、できないということです。
とすると、UTF-8のファイルでもエラーは出ないということでしょうか?
どのような状況であれば、エラーが再現するのか、整理してご提示いただけますか?
いえ、UTF-8のファイルを入れた場合、エラー文が発生します。
テキストをANSIファイル選択し、入れた場合何も起きないという現象が起こります。
これは裏では何か保存をするための動きが起こっているのでしょうか?
では、読み込み部分は動作しているのではないでしょうか?
読み込みして、Convert ボタンを押したあとに動作しない、ということなのですね?
mp3 ファイルは生成されていますか?
chooseボタンからファイルを選択後、何も起こらずConvertボタンにならないといった感じです。
ああ、なるほど。
そこ、変数名間違ってましたよ。
どういうことですか?
button2がbuttonになってます。
できました!ありがとうございます!!!
自己解決にするなりして解決済みにして下さい。
Lhankor_Mhyさま
一言コメントいただいてもよろしいですか?
はい、どのようなコメントでしょうか?
BAにするためのものです。
回答しました。といただければよろしいかと。
いやいや、大してお役立ててませんでしたから、自己解決でお願いします。
そうですか。承知いたしました。心から感謝いたします。
回答1件
あなたの回答
tips
プレビュー