init
This commit is contained in:
57
.opencode/scripts/win_compat.py
Executable file
57
.opencode/scripts/win_compat.py
Executable file
@@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Windows compatibility utilities for ClaudeKit scripts.
|
||||
|
||||
Provides UTF-8 encoding support for Windows console (cp1252).
|
||||
Import this module early in scripts that output Unicode content.
|
||||
|
||||
Usage:
|
||||
# At top of script, after imports:
|
||||
from win_compat import safe_print, ensure_utf8_stdout
|
||||
|
||||
# Option 1: Wrap stdout globally (recommended for scripts with many prints)
|
||||
ensure_utf8_stdout()
|
||||
print("Unicode content: emojis, symbols, etc.")
|
||||
|
||||
# Option 2: Use safe_print for individual calls
|
||||
safe_print("Unicode content: emojis, symbols, etc.")
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
_stdout_wrapped = False
|
||||
|
||||
|
||||
def ensure_utf8_stdout():
|
||||
"""Wrap sys.stdout to use UTF-8 encoding on Windows.
|
||||
|
||||
Safe to call multiple times - only wraps once.
|
||||
Call this early in script execution, before any print() calls.
|
||||
"""
|
||||
global _stdout_wrapped
|
||||
if _stdout_wrapped:
|
||||
return
|
||||
|
||||
if sys.platform == 'win32':
|
||||
import io
|
||||
# Only wrap if stdout has a buffer (not already wrapped)
|
||||
if hasattr(sys.stdout, 'buffer'):
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||||
|
||||
_stdout_wrapped = True
|
||||
|
||||
|
||||
def safe_print(text):
|
||||
"""Print with Unicode fallback for Windows cp1252 console.
|
||||
|
||||
Use this for individual print calls when you can't wrap stdout globally.
|
||||
Falls back to replacing unencodable characters with '?'.
|
||||
|
||||
Args:
|
||||
text: String to print (can contain any Unicode characters)
|
||||
"""
|
||||
try:
|
||||
print(text)
|
||||
except UnicodeEncodeError:
|
||||
# Fallback: replace unencodable chars
|
||||
encoding = getattr(sys.stdout, 'encoding', 'utf-8') or 'utf-8'
|
||||
print(text.encode(encoding, errors='replace').decode(encoding))
|
||||
Reference in New Issue
Block a user