From 78b7646bdb91285873ac26bca060591e06c45afe Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sat, 17 Jan 2026 14:19:15 +0900 Subject: [Bug #21842] Let `rb_interned_str` return US-ASCII if possible --- string.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'string.c') diff --git a/string.c b/string.c index 6f4ea03fb3..2d74c46a36 100644 --- a/string.c +++ b/string.c @@ -12709,7 +12709,15 @@ VALUE rb_interned_str(const char *ptr, long len) { struct RString fake_str = {RBASIC_INIT}; - return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), true, false); + int encidx = ENCINDEX_US_ASCII; + int coderange = ENC_CODERANGE_7BIT; + if (len > 0 && search_nonascii(ptr, ptr + len)) { + encidx = ENCINDEX_ASCII_8BIT; + coderange = ENC_CODERANGE_VALID; + } + VALUE str = setup_fake_str(&fake_str, ptr, len, encidx); + ENC_CODERANGE_SET(str, coderange); + return register_fstring(str, true, false); } VALUE -- cgit v1.2.3