From 08dd0335fff231c75b1c31e063db1a92b313a387 Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Sun, 30 Aug 2026 05:05:17 +0200 Subject: [PATCH] Preserve binary input strings while measuring --- lib/unicode/display_width.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/unicode/display_width.rb b/lib/unicode/display_width.rb index a95a77e..839cb90 100644 --- a/lib/unicode/display_width.rb +++ b/lib/unicode/display_width.rb @@ -51,9 +51,9 @@ class DisplayWidth def self.of(string, ambiguous = nil, overwrite = nil, old_options = {}, **options) # Binary strings don't make much sense when calculating display width. # Assume it's valid UTF-8 - if string.encoding == Encoding::BINARY && !string.force_encoding(Encoding::UTF_8).valid_encoding? - # Didn't work out, go back to binary - string.force_encoding(Encoding::BINARY) + if string.encoding == Encoding::BINARY + utf8_string = string.dup.force_encoding(Encoding::UTF_8) + string = utf8_string if utf8_string.valid_encoding? end string = string.encode(Encoding::UTF_8, invalid: :replace, undef: :replace) unless string.encoding == Encoding::UTF_8