2015-08-10 3 views
4

Comment imprimer une minuscule grecque epsilon en SML (en utilisant Poly/ML)?Impression de caractères Unicode dans Poly/ML

J'ai essayé les suivantes:

print "ε"; (* Error-unprintable character found in file *) 
print "\u03B5"; (* Error-Conversion exception (Invalid string constant) raised while converting \u03B5 to string *) 

Est-ce tout simplement pas possible? Sûrement le travail du terminal consiste à rendre le caractère, et donc imprimer le code de caractère brut à stdout devrait être possible?

Répondre

3

La séquence d'échappement Unicode \u03B5 correspond à UTF-16.

Votre terminal exécute probablement UTF-8 dans lequel ε est 0xCE 0xB5. Saisie en octets les décimales:

> print "\206\181\n"; 
ε 
+1

Merci - il est intéressant de noter que la fonction String.size traitera ces octets comme deux caractères séparés, et il est donc nécessaire d'écrire votre propre fonction si vous voulez calculer correctement la longueur d'une chaîne lors de l'impression. –

+2

J'ai écrit quelques fonctions pour manipuler les chaînes UTF8 dans SML à https://raw.githubusercontent.com/HOL-Theorem-Prover/HOL/master/src/portableML/UTF8.sml (remplacer le suffixe .sml par .sig pour voir la signature). –