Browse Source

print '?' if a letter can't be encoded using the system default encoding (#859)

Jong Wook Kim 2 năm trước cách đây
mục cha
commit
9d646db9d8
1 tập tin đã thay đổi với 5 bổ sung1 xóa
  1. 5 1
      whisper/transcribe.py

+ 5 - 1
whisper/transcribe.py

@@ -1,5 +1,6 @@
 import argparse
 import os
+import sys
 import warnings
 from typing import List, Optional, Tuple, Union, TYPE_CHECKING
 
@@ -165,7 +166,10 @@ def transcribe(
             }
         )
         if verbose:
-            print(f"[{format_timestamp(start)} --> {format_timestamp(end)}] {text}")
+            line = f"[{format_timestamp(start)} --> {format_timestamp(end)}] {text}\n"
+            # compared to just `print(line)`, this replaces any character not representable using
+            # the system default encoding with an '?', avoiding UnicodeEncodeError.
+            sys.stderr.buffer.write(line.encode(sys.getdefaultencoding(), errors="replace"))
 
     # show the progress bar when verbose is False (otherwise the transcribed text will be printed)
     num_frames = mel.shape[-1]