module IDN::Idna
The Idna module of LibIDN Ruby Bindings.
Example usage¶ ↑
require 'idn' include IDN puts 'ACE-Prefix: ' + Idna::ACE_PREFIX domain = Idna.toUnicode('xn--rksmrgs-5wao1o.josefsson.org', Idna::USE_STD3_ASCII_RULES | Idna::ALLOW_UNASSIGNED)
Constants¶ ↑
ACE_PREFIX
-
The ACE prefix: āxnāā.
ALLOW_UNASSIGNED
-
Used as flag for toASCII/toUnicode.
USE_STD3_ASCII_RULES
-
Used as flag for toASCII/toUnicode.
Constants
- ACE_PREFIX
- ALLOW_UNASSIGNED
- USE_STD3_ASCII_RULES
Public Class Methods
IDN::Idna.toASCII(string, flags=nil) → string
click to toggle source
Converts a domain name in UTF-8 format into an ASCII string. The domain name may contain several labels, separated by dots.
Raises IDN::Idna::IdnaError on failure.
static VALUE toASCII(int argc, VALUE argv[], VALUE self)
{
int rc;
char *buf;
VALUE str, flags, retv;
rb_scan_args(argc, argv, "11", &str, &flags);
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
if (flags != Qnil) {
Check_Type(flags, T_FIXNUM);
flags = FIX2INT(flags);
} else {
flags = 0x0000;
}
rc = idna_to_ascii_8z(RSTRING_PTR(str), &buf, flags);
if (rc != IDNA_SUCCESS) {
xfree(buf);
rb_raise(eIdnaError, "%s (%d)", idna_strerror(rc), rc);
return Qnil;
}
retv = ENCODED_STR_NEW2(buf, "ASCII-8BIT");
xfree(buf);
return retv;
}
IDN::Idna.toUnicode(string, flags=nil) → string
click to toggle source
Converts a possibly ACE encoded domain name in UTF-8 format into an UTF-8 string. The domain name may contain several labels, separated by dots.
Raises IDN::Idna::IdnaError on failure.
static VALUE toUnicode(int argc, VALUE argv[], VALUE self)
{
int rc;
char *buf;
VALUE str, flags, retv;
rb_scan_args(argc, argv, "11", &str, &flags);
str = rb_check_convert_type(str, T_STRING, "String", "to_s");
if (flags != Qnil) {
Check_Type(flags, T_FIXNUM);
flags = FIX2INT(flags);
} else {
flags = 0x0000;
}
rc = idna_to_unicode_8z8z(RSTRING_PTR(str), &buf, flags);
if (rc != IDNA_SUCCESS) {
xfree(buf);
rb_raise(eIdnaError, "%s (%d)", idna_strerror(rc), rc);
return Qnil;
}
retv = ENCODED_STR_NEW2(buf, "UTF-8");
xfree(buf);
return retv;
}