Decodificare con le risorse del API di Libidn i nomi di dominio internazionalizzati

Da Gambas-it.org - Wikipedia.

La libreria Libidn consente di codificare e decodificare nomi di dominio internazionalizzati, ossia nomi di dominio contenenti uno o più caratteri non ASCII.

Per poter fruire in Gambas delle risorse della libreria Libidn, bisognerà avere installata e richiamare la libreria condivisa: libidn.so.12.6.4


Mostriamo un semplice esempio per decodificare un nome di dominio internazionalizzato nel corrispondente etichetta ASCII. Se la decodifica ha successo, La sequenza originale di caratteri non-ASCII e la sequenza risultante ASCII sono etichette equivalenti.

Library "libidn:12.6.4"

Private Const IDNA_SUCCESS As Integer = 0

' int idna_to_ascii_lz (const char *input, char **output, int flags)
' Convert domain name in the locale's encoding to ASCII string.
Private Extern idna_to_ascii_lz(idnin As String, idnout As Pointer, flags As Integer) As Integer

' const char *idna_strerror (Idna_rc rc)
' Convert a return code integer to a text string.
Private Extern idna_strerror(rc As Integer) As String


Public Sub Main()
 
 Dim s As String
 Dim p As Pointer
 Dim ris As Integer
 
 Print "Immettere dominio codificato (internazionalizzato):"
 Input s
  
 ris = idna_to_ascii_lz(s, VarPtr(p), 0)
 If ris > IDNA_SUCCESS Then Error.Raise("Decodifica in ASCII fallita (" & ris & "): " & idna_strerror(ris))
 
 Print "\nRisultato:\n"; String@(p)
  
End

Fare, ad esempio, la prova con il dominio internazionalizzato: 日本レジストリサービス.jp
Quindi lanciare nella barra degli indirizzi web il risultato ottenuto dalla conversione.



Riferimenti