[ruby-core:123330] [Ruby Feature#21617] Add Internationalized Domain Name (IDN) support to URI
From:
"chucke (Tiago Cardoso) via ruby-core" <ruby-core@...>
Date:
2025-09-25 13:44:58 UTC
List:
ruby-core #123330
SXNzdWUgIzIxNjE3IGhhcyBiZWVuIHVwZGF0ZWQgYnkgY2h1Y2tlIChUaWFnbyBDYXJkb3NvKS4N Cg0KDQpKdXN0IGFkZGluZyBteSBvcmlnaW5hbCBwdWJsaWMgQVBJIHN1Z2dlc3Rpb25zLCBmb3Ig dmlzaWJpbGl0eSBhbmQgZnVydGhlciBkaXNjdXNzaW9uIGJ5IHRoZSBjb3JlIHRlYW0uDQoNCkkg cHJvcG9zZSB0aGF0IGBVUkk6OkdlbmVyaWNgIHN1cHBvcnRzIHB1bnljb2RlIGRlY29kaW5nIE9P VEIgYnkgcmVseWluZyBvbiB0aGUgY3VycmVudCBiZWhhdmlvdXIgb2YgYFVSSTo6R2VuZXJpYyNo b3N0bmFtZWAsIHdoaWNoIGFscmVhZHkgYXBwbGllcyB0cmFuc2Zvcm1hdGlvbnMgdG8gdGhlIHBh c3NlZCBgaG9zdGAgd2hlbiBuZWNlc3NhcnksIHN1Y2ggYXMgaW4gdGhlIGJlbG93IGNhc2Ugb2Yg SVB2NiBhZGRyZXNzZXM6DQoNCiAgICAjIHRoZSBleGFtcGxlIGFib3ZlIGlzIGluc3BpcmVkIGlu IGhvdyB1cmkgYWxyZWFkeSBoYW5kbGVzIElQdjYgYWRkcmVzc2VzDQogICAgdXJpID0gVVJJKCJo dHRwczovL1s6OjFdIikNCiAgICB1cmkuaG9zdCAjPT4gIls6OjFdIiwgY2Fubm90IGJlIHVzZWQg aW4gU29ja2V0Lm5ldyhob3N0LCBwb3J0KQ0KICAgIHVyaS5ob3N0bmFtZSAjPT4gIjo6MSIsIGNh biBiZSB1c2VkIGluIFNvY2tldC5uZXcoaG9zdCwgcG9ydCkNCg0KdGhlcmVmb3JlLCBwdW55Y29k ZSB0cmFuc2xhdGlvbiB3b3VsZCBoYXBwZW4gdHJhbnNwYXJlbnRseSBmb3IgSUROQXMgd2hlbiBj YWxsaW5nIGBob3N0bmFtZWA6DQoNCiAgICB1cmkgPSAiaHR0cHM6Ly9s4pml77iPaC53cyINCiAg ICB1cmkgPSBVUkkodXJpKQ0KICAgIHVyaS5ob3N0ICM9PiAibOKZpe+4j2gud3MiICM9PiBjYW5u b3QgYmUgdXNlZCBpbiBTb2NrZXQubmV3KGhvc3QsIHBvcnQpDQogICAgdXJpLmhvc3RuYW1lICM9 PiAieG4tLWxoLXQweHo5MjZoLndzIiAjPT4gY2FuIGJlIHVzZWQgaW4gU29ja2V0Lm5ldyhob3N0 LCBwb3J0KSwgd2hpY2ggd2lsbCBwZXJmb3JtIEROUyB2aWEgZ2V0YWRkcmluZm8NCg0KDQpUaGlz IHdvdWxkIHJlcXVpcmUgdmVyeSBsaXR0bGUgY2hhbmdlIGluIGByZXNvbHZgIGxpYnJhcnksIGJl Zm9yZSBpc3N1aW5nIHRoZSBETlMgcXVlcnkuIFRoZSBzYW1lIHdvdWxkIGFwcGx5IGZvciBtb3N0 IHVzZSBjYXNlcywgSSBiZWxpZXZlLg0KDQpUaGUgcmVxdWlyZWQgcHVueWNvZGUgZGVjb2Rpbmcg bG9naWMgY291bGQgYmUgaW1wbGVtZW50ZWQgaW4gYSBzZXBhcmF0ZSBgVVJJOjpQdW55Y29kZWAg bW9kdWxlLiBUaGlzIG1vZHVsZSBjb3VsZCBiZSBleHBvc2VkIHB1YmxpY2x5LCB3aXRoIGEgc2lu Z2xlIHB1YmxpYyBtZXRob2QsIGBkZWNvZGUodXJpKWAsIHdoaWNoIHdvdWxkIHJldHVybiB0aGUg cHVueWNvZGUgVVJJIG9mIGEgZ2l2ZW4gSUROQS4gVGhpcyBBUEkgY291bGQgYmUgZXh0ZW5kZWQg dG8gc3VwcG9ydCBtb3JlIGFkdmFuY2VkIHVzZSBjYXNlcyBiZXlvbmQgdGhlIG1haW4gY29tbW9u IHVzZSBjYXNlICh3aGljaCBgVVJJOjpHZW5lcmljI2hvc3RuYW1lYCBzaG91bGQgYWRkcmVzcyks IGxpa2UgW3RoZSBvbmVzIGRvY3VtZW50ZWQgaGVyZV0oaHR0cHM6Ly9naXRodWIuY29tL3Nrcnl1 a292L3VyaS1pZG5hP3RhYj1yZWFkbWUtb3YtZmlsZSNvcHRpb25zKS4NCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMjE2MTc6IEFkZCBJbnRlcm5h dGlvbmFsaXplZCBEb21haW4gTmFtZSAoSUROKSBzdXBwb3J0IHRvIFVSSQ0KaHR0cHM6Ly9idWdz LnJ1YnktbGFuZy5vcmcvaXNzdWVzLzIxNjE3I2NoYW5nZS0xMTQ2OTgNCg0KKiBBdXRob3I6IGJ5 cm9vdCAoSmVhbiBCb3Vzc2llcikNCiogU3RhdHVzOiBPcGVuDQotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpPcmlnaW5hbGx5IHByb3Bvc2VkIGJ5IEBjaHVja2UgYXQg aHR0cHM6Ly9naXRodWIuY29tL3J1YnkvdXJpL2lzc3Vlcy83NiwgdHJ5aW5nIHRvIGZvcm1hbGl6 ZSBpdCBoZXJlLg0KDQojIyMgQ29udGV4dA0KDQpbSW50ZXJuYWxpemVkIERvbWFpbiBOYW1lc10o aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSW50ZXJuYXRpb25hbGl6ZWRfZG9tYWluX25h bWUpLCBhcmUgZ2V0dGluZyBtb3JlIGNvbW1vbiwgeWV0IFJ1YnkncyBgdXJpYCBkZWZhdWx0IGdl bSBoYXMgbm8gc3VwcG9ydCBmb3IgaXQ6DQoNCmBgYHJ1YnkNCj4+IFVSSSgiaHR0cHM6Ly/ml6Xm nKzoqp4uanAvIikNClVSSSBtdXN0IGJlIGFzY2lpIG9ubHkgImh0dHBzOi8vXHU2NUU1XHU2NzJD XHU4QTlFLmpwLyIgKFVSSTo6SW52YWxpZFVSSUVycm9yKQ0KYGBgDQoNClNvIGFueSBwcm9ncmFt IHRoYXQgd2hpY2ggdG8gaGFuZGxlIGFyYml0cmFyeSB2YWxpZCBVUklzIHByb3ZpZGVkIGJ5IHVz ZXJzIGNhbid0IHVzZSB0aGUgYHVyaWAgZ2VtLCBhbmQgaW5zdGVhZCBoYXZlIHRvIGRlcGVuZCBv biB0aGlyZCBwYXJ0eSBnZW1zIGxpa2UgW2BhZGRyZXNzYWJsZWBdKGh0dHBzOi8vcnVieWdlbXMu b3JnL2dlbXMvYWRkcmVzc2FibGUpDQoNCmBgYHJ1YnkNCj4+IEFkZHJlc3NhYmxlOjpVUkkucGFy c2UoImh0dHBzOi8v5pel5pys6KqeLmpwLyIpDQo9PiAjPEFkZHJlc3NhYmxlOjpVUkk6MHhkNjQ4 IFVSSTpodHRwczovL+aXpeacrOiqni5qcC8+DQpgYGANCg0KQnV0IGV2ZW4gdGhlcmUsIGl0IHdv bid0IHNlYW1sZXNzbHkgd29yayB3aXRoIG90aGVyIGxpYnJhcmllcyBzdWNoIGFzIGBuZXQtaHR0 cGA6DQoNCmBgcnVieQ0KPj4gTmV0OjpIVFRQLmdldChBZGRyZXNzYWJsZTo6VVJJLnBhcnNlKCJo dHRwczovL+aXpeacrOiqni5qcC8iKSkuYnl0ZXNpemUNCk9wZW5TU0w6OlNTTDo6U1NMU29ja2V0 I2Nvbm5lY3Rfbm9uYmxvY2snOiBTU0xfY29ubmVjdCByZXR1cm5lZD0xIGVycm5vPTAgcGVlcmFk ZHI9WzIwMDE6MjE4OjMwMDE6Nzo6MTEwXTo0NDMgc3RhdGU9ZXJyb3I6IHNzbC90bHMgYWxlcnQg aGFuZHNoYWtlIGZhaWx1cmUgKFNTTCBhbGVydCBudW1iZXIgNDApIChPcGVuU1NMOjpTU0w6OlNT TEVycm9yKQ0KYGBgDQoNCllvdSBoYXZlIHRvIGV4cGxpY2l0bHkgbm9ybWFsaXplIHRoZSBVUkw6 DQoNCmBgYHJ1YnkNCj4+IEFkZHJlc3NhYmxlOjpVUkkucGFyc2UoImh0dHBzOi8v5pel5pys6Kqe LmpwLyIpLm5vcm1hbGl6ZQ0KPT4gIzxBZGRyZXNzYWJsZTo6VVJJOjB4MTMwZDAgVVJJOmh0dHBz Oi8veG4tLXdndjcxYTExOWUuanAvPg0KPj4gTmV0OjpIVFRQLmdldChBZGRyZXNzYWJsZTo6VVJJ LnBhcnNlKCJodHRwczovL+aXpeacrOiqni5qcC8iKS5ub3JtYWxpemUpLmJ5dGVzaXplDQo9PiA4 NzAzDQpgYGANCg0KIyMjIEZlYXR1cmUgUmVxdWVzdA0KDQpJIGJlbGlldmUgaXQncyB3b3VsZCBi ZSB2ZXJ5IHVzZWZ1bCBpZiB0aGUgZGVmYXVsdCBgdXJpYCBnZW0gaGFkIHRoZSBjYXBhY2l0eSBv ZjoNCg0KICAtIFBhcnNpbmcgSUROQSBkb21haW4gbmFtZXMuDQogIC0gQ29udmVydCBVUkxzIGJl dHdlZW4gdGhlaXIgdW5pY29kZSBhbmQgQVNDSUkgZm9ybXMuDQoNCg0KVGhlIGBVUkk6OkdlbmVy aWNgIGNsYXNzIGFscmVhZHkgaGF2ZSBhIGAjbm9ybWFsaXplYCBtZXRob2QgdG8gZW5zdXJlIHRo ZSBob3N0IGFuZCBzY2hlbWEgcGFydHMgYXJlIGFsbCBsb3dlciBjYXNlLCBpdCBjb3VsZCBiZSBl eHRlbmRlZCB0byBlbmNvZGUgSUROIGhvc3RzIGludG8gdGhlaXIgQVNDSUkgZXF1aXZhbGVudC4N Cg0KSXQgd291bGQgYWxzbyBiZSB1c2VmdWwgaWYgdGhlIG9wcG9zaXRlIG9wZXJhdGlvbiB3YXMg c3VwcG9ydGVkIGZvciBkaXNwbGF5IHB1cnBvc2VzLCBub3Qgc3VyZSB3aGF0IG5hbWUgc3VjaCBh IG1ldGhvZCBjb3VsZCBoYXZlLCBwZXJoYXBzIGBjYW5vbmljYWxpemVgPw0KDQojIyMgSW1wbGVt ZW50YXRpb24NCg0KSW4gaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvdXJpL2lzc3Vlcy83NiBAc2ty eXVrb3YgcG9pbnRlZCB0byBoaXMgcHVyZSBSdWJ5IGltcGxlbWVudGF0aW9uIG9mIElETkEgMjAw OCAoaHR0cHM6Ly9naXRodWIuY29tL3Nrcnl1a292L3VyaS1pZG5hKSwgSSBiZWxpZXZlIGl0IHdv dWxkIGJlIGdvb2QgdG8gdXBzdHJlYW0gcGFydHMgb2YgaXQgaW4gdGhlIGB1cmlgIGdlbSB0byBp bXBsZW1lbnQgdGhlc2UgZmVhdHVyZS4NCiANCg0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1Ynkt bGFuZy5vcmcvDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CiBydWJ5LWNvcmUgbWFpbGluZyBsaXN0IC0tIHJ1YnktY29yZUBtbC5ydWJ5LWxhbmcub3JnCiBU byB1bnN1YnNjcmliZSBzZW5kIGFuIGVtYWlsIHRvIHJ1YnktY29yZS1sZWF2ZUBtbC5ydWJ5LWxh bmcub3JnCiBydWJ5LWNvcmUgaW5mbyAtLSBodHRwczovL21sLnJ1YnktbGFuZy5vcmcvbWFpbG1h bjMvbGlzdHMvcnVieS1jb3JlLm1sLnJ1YnktbGFuZy5vcmcvCg==