Specifically set the encoding to UTF-8. Simplify speak_thread.

This commit is contained in:
Storm Dragon 2025-01-25 08:41:11 -05:00
parent db40032d3d
commit a0e539d3ce

View File

@ -245,30 +245,15 @@ class SpeechHandler:
"""Thread to handle speech processing""" """Thread to handle speech processing"""
startSpeech = False # Don't start speaking until after initial output startSpeech = False # Don't start speaking until after initial output
while True:
try: try:
# Read directly from stdout, no need for buffer attribute line = process.stdout.readline()
for line in process.stdout: # Keep gzdoom's existing functionality of lines being printed to the console.
try: print(line, end='')
# Try multiple encodings in order if not line:
encodings = ['utf-8', 'gbk', 'big5', 'latin1'] break
lineStr = None
for encoding in encodings:
try:
if isinstance(line, bytes):
lineStr = line.decode(encoding).strip()
else:
lineStr = line.strip() lineStr = line.strip()
break # Successfully decoded
except UnicodeDecodeError:
continue
if lineStr is None:
print(f"Failed to decode line with any encoding", file=sys.stderr)
continue
# Keep gzdoom's existing functionality of lines being printed to the console
print(lineStr)
# Wait for the initial separator before starting speech # Wait for the initial separator before starting speech
if not startSpeech: if not startSpeech:
@ -278,17 +263,11 @@ class SpeechHandler:
processedLine = self.process_line(lineStr) processedLine = self.process_line(lineStr)
if processedLine: if processedLine:
try:
self.speak(processedLine) self.speak(processedLine)
except Exception as e:
print(f"Error speaking line: {e}", file=sys.stderr)
except Exception as e: except Exception as e:
print(f"Error processing line: {e}", file=sys.stderr) print(f"Error processing game output: {e}", file=sys.stderr)
continue # Skip this line and continue with the next break
except Exception as e:
print(f"Error in speech thread: {e}", file=sys.stderr)
class MenuDialog(QDialog): class MenuDialog(QDialog):