From: "chucke (Tiago Cardoso) via ruby-core" Date: 2023-05-27T22:54:25+00:00 Subject: [ruby-core:113688] [Ruby master Feature#19697] Resolv::DNS resolution for international domains fails with "Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT" Issue #19697 has been updated by chucke (Tiago Cardoso). I agree with byroot, this shouldn't be solved at the resolve layer. FWIW I've proposed the feature request in the stdlib uri library, which would.have worked here, but the core maintainers didn't agree this is a worthy feature to have. Since then, I've released [idnx](https://github.com/HoneyryderChuck/idnx), which uses libidn2 (or winnls) to encode IDNA2008 domains into punycode. I built it for [httpx](https://honeyryderchuck.gitlab.io/httpx/), the http library I'm the maintainer of. The confusion may also come from the fact that getaddrinfo supports IDNA domain name resolution in macOS. However, that's not a DNS feature. ---------------------------------------- Feature #19697: Resolv::DNS resolution for international domains fails with "Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ASCII-8BIT" https://bugs.ruby-lang.org/issues/19697#change-103333 * Author: clairity (claire c) * Status: Open * Priority: Normal ---------------------------------------- i try to resolve a registered international domain, and instead of receiving DNS records, get an `incompatible character encodings` error: ``` # irb 3.2.2 :001 > require 'resolv' 3.2.2 :002 > res = Resolv::DNS.open { |dns| dns.getresource '������.������', Resolv::DNS::Resource::IN::MX } ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:777:in `[]=': incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError) from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:777:in `sender' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:527:in `block in fetch_resource' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1125:in `block (3 levels) in resolv' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1123:in `each' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1123:in `block (2 levels) in resolv' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1122:in `each' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1122:in `block in resolv' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1120:in `each' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:1120:in `resolv' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:521:in `fetch_resource' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:507:in `each_resource' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:488:in `getresource' from (irb):3:in `block in ' from ~/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/resolv.rb:298:in `open' from (irb):3:in `
' from ~/.rvm/gems/ruby-3.2.2/gems/irb-1.6.4/exe/irb:9:in `' ... 4 levels... ``` i also tried this command in 3.3.0-preview1 and 2.1.4, receiving the same error. the expected response is to get DNS records for `������.������` (or any registered international domain). `dig ������.������` does indeed return a short but valid DNS record. -- 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/postorius/lists/ruby-core.ml.ruby-lang.org/