From: "YO4 (Yoshinao Muramatsu) via ruby-core" Date: 2024-10-21T08:50:22+00:00 Subject: [ruby-core:119558] [Ruby master Bug#19383] Time.now.zone encoding for German display language in Windows is incorrect Issue #19383 has been updated by YO4 (Yoshinao Muramatsu). There is another remaining locale related issue. ref: https://bugs.ruby-lang.org/issues/20774 As an alternative solution, if setlocale(LC_CTYPE, ".65001") could be used, it would solve the problem, but it does not seem to work in all environments. Also, could there be an impact on the extension library? Another idea is to use SetProcessPreferredUILanguages or SetThreadPreferredUILanguages. It is possible to lock in a fallback language. It's results may or may not be desirable. Similarly, the result will affect another program running in the same process. Saying to #note-5 patch, It seems to work fine, except for corner cases like setting Unicode-specific characters in TZ. I also think that in today's environment there are many situations where we want UTF-8 results. ---------------------------------------- Bug #19383: Time.now.zone encoding for German display language in Windows is incorrect https://bugs.ruby-lang.org/issues/19383#change-110174 * Author: stringsn88keys (Thomas Powell) * Status: Assigned * Assignee: windows * ruby -v: 3.1.3 * Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN ---------------------------------------- OS: Verified on Windows 10 and Windows Server 2022 and Ruby 2.7.7 through 3.1.3 Display language: Verified on German, but may impact other languages in which Time.now.zone returns characters that aren't [A-Za-z]. Time zone: CET (UTC +01:00) Amsterdam, Berlin, ... Time.now.zone # => "Mitteleuro\xE3ische Zeit" Time.now.zone.encoding # => # puts Time.now.zone # => "Mitteleurop���ische Zeit" (should be "Mitteleurop��ische Zeit") Time.now.zone.encode(Encoding::UTF_8) # => "Mitteleurop���ische Zeit" Doing a force_encoding on all encodings in Encoding.list reveals that ISO-8859-(1..16) and Windows-125(0,2,4,7) work to coerce the �� out of the time zone string: Time.now.zone.force_encoding(Encoding::WINDOWS_1252) # => "Mitteleuro\xE3ische Zeit" ... but ... Time.now.zone.force_encoding(Encoding::WINDOWS_1252).encode(Encoding::UTF_8) #=> "Mitteleurop��ische Zeit" Related issue: This improper encoding/rendering caused Ohai's JSON output to be unparseable. Workaround was forcing to Windows-1252. https://github.com/chef/ohai/pull/1781 -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/