Skip to content

Commit 6a0b6d5

Browse files
committed
update
1 parent e3fc5ce commit 6a0b6d5

1 file changed

Lines changed: 26 additions & 5 deletions

File tree

Mailman/HTMLFormatter.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -418,19 +418,40 @@ def ParseTags(self, template, replacements, lang=None):
418418
if '&' in repl:
419419
parts[i] = repl
420420
else:
421-
repl = repl.encode(charset, 'replace')
421+
# Ensure proper encoding/decoding
422+
try:
423+
# First try to decode if it's already encoded
424+
if isinstance(repl, bytes):
425+
repl = repl.decode(charset, 'replace')
426+
# Then encode and decode to ensure proper charset
427+
repl = repl.encode(charset, 'replace').decode(charset, 'replace')
428+
parts[i] = repl
429+
except (UnicodeError, LookupError):
430+
# Fallback to utf-8 if charset fails
431+
repl = repl.encode('utf-8', 'replace').decode('utf-8', 'replace')
432+
parts[i] = repl
433+
elif isinstance(repl, bytes):
434+
try:
422435
repl = repl.decode(charset, 'replace')
423436
parts[i] = repl
424-
elif isinstance(repl, bytes):
425-
repl = repl.decode(charset, 'replace')
426-
parts[i] = repl
437+
except (UnicodeError, LookupError):
438+
repl = repl.decode('utf-8', 'replace')
439+
parts[i] = repl
427440
else:
428441
parts[i] = str(repl)
429442
else:
430443
parts[i] = ''
431444
i = i + 2
432445

433-
return EMPTYSTRING.join(parts)
446+
# Join parts and ensure proper encoding
447+
result = EMPTYSTRING.join(parts)
448+
try:
449+
# Ensure the final output is properly encoded
450+
if isinstance(result, bytes):
451+
result = result.decode(charset, 'replace')
452+
return result
453+
except (UnicodeError, LookupError):
454+
return result.decode('utf-8', 'replace')
434455

435456
def GetStandardReplacements(self, lang=None, replacements=None):
436457
"""Get the standard replacements for this list."""

0 commit comments

Comments
 (0)