Skip to content

Commit 14da0e5

Browse files
committed
improve eval_ToString
1 parent a09ba04 commit 14da0e5

2 files changed

Lines changed: 12 additions & 11 deletions

File tree

mathics/builtin/atomic/strings.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,17 +282,14 @@ def eval_set(self, value, evaluation):
282282

283283
def eval_setdelayed(self, value, evaluation):
284284
"""SetDelayed[$CharacterEncoding, value_]"""
285-
if (
286-
not isinstance(value, String)
287-
or value.value not in CHARACTER_ENCODING_MAP.keys()
288-
):
285+
if not isinstance(value, String):
289286
evaluation.message("$CharacterEncoding", "charcode", value)
290287
return
291288
try:
292289
load_encoding_table(value.value, evaluation)
293290
evaluation.definitions.set_ownvalue("System`$CharacterEncoding", value)
294291
except EncodingNameError:
295-
pass
292+
evaluation.message("$CharacterEncoding", "charcode", value)
296293

297294

298295
class CharacterEncodings(Predefined):

mathics/eval/strings.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,16 @@ def eval_ToString(
2626
) -> String:
2727

2828
boxes = format_element(expr, evaluation, form)
29-
30-
if encoding not in ("utf8", "utf-8", "unicode"):
31-
try:
32-
load_encoding_table(encoding, evaluation)
33-
except EncodingNameError:
34-
return String(boxes.to_text(evaluation=evaluation, encoding="Unicode"))
29+
try:
30+
return String(boxes.to_text(evaluation=evaluation, encoding=encoding))
31+
except EncodingNameError:
32+
pass
33+
34+
# If the encoding does not already exists, try to load it and do it again.
35+
try:
36+
load_encoding_table(encoding, evaluation)
37+
except EncodingNameError:
38+
return String(boxes.to_text(evaluation=evaluation, encoding="Unicode"))
3539

3640
return String(boxes.to_text(evaluation=evaluation, encoding=encoding))
3741

0 commit comments

Comments
 (0)