program TestUTF8ToASCII;
{$mode objfpc}{$H+}
{$IfDef windows}
{$AppType console}
{$EndIf}
uses
Classes, LazUTF8, Types;
function NameChrToASCII(aUTF8Codepoint: String): Char;
begin
if Length(aUTF8Codepoint) > 2 then
Exit('?');
case aUTF8Codepoint of
'À': Exit('A');
'Á': Exit('A');
'Â': Exit('A');
'Ã': Exit('A');
'Ä': Exit('A');
'Å': Exit('A');
'Æ': Exit('A');
'Ç': Exit('C');
'È': Exit('E');
'É': Exit('E');
'Ê': Exit('E');
'Ë': Exit('E');
'Ì': Exit('I');
'Í': Exit('I');
'Î': Exit('I');
'Ï': Exit('I');
'Ð': Exit('D');
'Ñ': Exit('N');
'Ò': Exit('O');
'Ó': Exit('O');
'Ô': Exit('O');
'Õ': Exit('O');
'Ö': Exit('O');
'×': Exit('x');
'Ø': Exit('O');
'Ù': Exit('U');
'Ú': Exit('U');
'Û': Exit('U');
'Ü': Exit('U');
'Ý': Exit('Y');
'Þ': Exit('T');
'ß': Exit('s');
'à': Exit('a');
'á': Exit('a');
'â': Exit('a');
'ã': Exit('a');
'ä': Exit('a');
'å': Exit('a');
'æ': Exit('a');
'ç': Exit('c');
'è': Exit('e');
'é': Exit('e');
'ê': Exit('e');
'ë': Exit('e');
'ì': Exit('i');
'í': Exit('i');
'î': Exit('i');
'ï': Exit('i');
'ð': Exit('d');
'ñ': Exit('n');
'ò': Exit('o');
'ó': Exit('o');
'ô': Exit('o');
'õ': Exit('o');
'ö': Exit('o');
'ø': Exit('o');
'ù': Exit('u');
'ú': Exit('u');
'û': Exit('u');
'ü': Exit('u');
'ý': Exit('y');
'þ': Exit('t');
'ÿ': Exit('y');
'Ā': Exit('A');
'ā': Exit('a');
'Ă': Exit('A');
'ă': Exit('a');
'Ą': Exit('A');
'ą': Exit('a');
'Ć': Exit('C');
'ć': Exit('c');
'Ĉ': Exit('C');
'ĉ': Exit('c');
'Ċ': Exit('C');
'ċ': Exit('c');
'Č': Exit('C');
'č': Exit('c');
'Ď': Exit('D');
'ď': Exit('d');
'Đ': Exit('D');
'đ': Exit('d');
'Ē': Exit('E');
'ē': Exit('e');
'Ĕ': Exit('E');
'ĕ': Exit('e');
'Ė': Exit('E');
'ė': Exit('e');
'Ę': Exit('E');
'ę': Exit('e');
'Ě': Exit('E');
'ě': Exit('e');
'Ĝ': Exit('G');
'ĝ': Exit('g');
'Ğ': Exit('G');
'ğ': Exit('g');
'Ġ': Exit('G');
'ġ': Exit('g');
'Ģ': Exit('G');
'ģ': Exit('g');
'Ĥ': Exit('H');
'ĥ': Exit('h');
'Ħ': Exit('H');
'ħ': Exit('h');
'Ĩ': Exit('I');
'ĩ': Exit('i');
'Ī': Exit('I');
'ī': Exit('i');
'Ĭ': Exit('I');
'ĭ': Exit('i');
'Į': Exit('I');
'į': Exit('i');
'İ': Exit('I');
'ı': Exit('i');
'IJ': Exit('I');
'ij': Exit('i');
'Ĵ': Exit('J');
'ĵ': Exit('j');
'Ķ': Exit('K');
'ķ': Exit('k');
'ĸ': Exit('q');
'Ĺ': Exit('L');
'ĺ': Exit('l');
'Ļ': Exit('L');
'ļ': Exit('l');
'Ľ': Exit('L');
'ľ': Exit('l');
'Ŀ': Exit('L');
'ŀ': Exit('l');
'Ł': Exit('L');
'ł': Exit('l');
'Ń': Exit('N');
'ń': Exit('n');
'Ņ': Exit('N');
'ņ': Exit('n');
'Ň': Exit('N');
'ň': Exit('n');
'Ŋ': Exit('N');
'ŋ': Exit('n');
'Ō': Exit('O');
'ō': Exit('o');
'Ŏ': Exit('O');
'ŏ': Exit('o');
'Ő': Exit('O');
'ő': Exit('o');
'Œ': Exit('O');
'œ': Exit('o');
'Ŕ': Exit('R');
'ŕ': Exit('r');
'Ŗ': Exit('R');
'ŗ': Exit('r');
'Ř': Exit('R');
'ř': Exit('r');
'Ś': Exit('S');
'ś': Exit('s');
'Ŝ': Exit('S');
'ŝ': Exit('s');
'Ş': Exit('S');
'ş': Exit('s');
'Š': Exit('S');
'š': Exit('s');
'Ţ': Exit('T');
'ţ': Exit('t');
'Ť': Exit('T');
'ť': Exit('t');
'Ŧ': Exit('T');
'ŧ': Exit('t');
'Ũ': Exit('U');
'ũ': Exit('u');
'Ū': Exit('U');
'ū': Exit('u');
'Ŭ': Exit('U');
'ŭ': Exit('u');
'Ů': Exit('U');
'ů': Exit('u');
'Ű': Exit('U');
'ű': Exit('u');
'Ų': Exit('U');
'ų': Exit('u');
'Ŵ': Exit('W');
'ŵ': Exit('w');
'Ŷ': Exit('Y');
'ŷ': Exit('y');
'Ÿ': Exit('Y');
'Ź': Exit('Z');
'ź': Exit('z');
'Ż': Exit('Z');
'ż': Exit('z');
'Ž': Exit('Z');
'ž': Exit('z');
'ſ': Exit('s');
'ƀ': Exit('b');
'Ɓ': Exit('B');
'Ƃ': Exit('B');
'ƃ': Exit('b');
'Ƈ': Exit('C');
'ƈ': Exit('c');
'Ɖ': Exit('D');
'Ɗ': Exit('D');
'Ƌ': Exit('D');
'ƌ': Exit('d');
'Ɛ': Exit('E');
'Ƒ': Exit('F');
'ƒ': Exit('f');
'Ɠ': Exit('G');
'ƕ': Exit('h');
'Ɩ': Exit('I');
'Ɨ': Exit('I');
'Ƙ': Exit('K');
'ƙ': Exit('k');
'ƚ': Exit('l');
'Ɲ': Exit('N');
'ƞ': Exit('n');
'Ơ': Exit('O');
'ơ': Exit('o');
'Ƣ': Exit('O');
'ƣ': Exit('o');
'Ƥ': Exit('P');
'ƥ': Exit('p');
'ƫ': Exit('t');
'Ƭ': Exit('T');
'ƭ': Exit('t');
'Ʈ': Exit('T');
'Ư': Exit('U');
'ư': Exit('u');
'Ʋ': Exit('V');
'Ƴ': Exit('Y');
'ƴ': Exit('y');
'Ƶ': Exit('Z');
'ƶ': Exit('z');
'LJ': Exit('L');
'Lj': Exit('L');
'lj': Exit('l');
'NJ': Exit('N');
'Nj': Exit('N');
'nj': Exit('n');
'Ǎ': Exit('A');
'ǎ': Exit('a');
'Ǐ': Exit('I');
'ǐ': Exit('i');
'Ǒ': Exit('O');
'ǒ': Exit('o');
'Ǔ': Exit('U');
'ǔ': Exit('u');
'Ǖ': Exit('U');
'ǖ': Exit('u');
'Ǘ': Exit('U');
'ǘ': Exit('u');
'Ǚ': Exit('U');
'ǚ': Exit('u');
'Ǜ': Exit('U');
'ǜ': Exit('u');
'Ǟ': Exit('A');
'ǟ': Exit('a');
'Ǡ': Exit('A');
'ǡ': Exit('a');
'Ǣ': Exit('A');
'ǣ': Exit('a');
'Ǥ': Exit('G');
'ǥ': Exit('g');
'Ǧ': Exit('G');
'ǧ': Exit('g');
'Ǩ': Exit('K');
'ǩ': Exit('k');
'Ǫ': Exit('O');
'ǫ': Exit('o');
'Ǭ': Exit('O');
'ǭ': Exit('o');
'ǰ': Exit('j');
'DZ': Exit('D');
'Dz': Exit('D');
'dz': Exit('d');
'Ǵ': Exit('G');
'ǵ': Exit('g');
'Ǹ': Exit('N');
'ǹ': Exit('n');
'Ǻ': Exit('A');
'ǻ': Exit('a');
'Ǽ': Exit('A');
'ǽ': Exit('a');
'Ǿ': Exit('O');
'ǿ': Exit('o');
'Ȁ': Exit('A');
'ȁ': Exit('a');
'Ȃ': Exit('A');
'ȃ': Exit('a');
'Ȅ': Exit('E');
'ȅ': Exit('e');
'Ȇ': Exit('E');
'ȇ': Exit('e');
'Ȉ': Exit('I');
'ȉ': Exit('i');
'Ȋ': Exit('I');
'ȋ': Exit('i');
'Ȍ': Exit('O');
'ȍ': Exit('o');
'Ȏ': Exit('O');
'ȏ': Exit('o');
'Ȑ': Exit('R');
'ȑ': Exit('r');
'Ȓ': Exit('R');
'ȓ': Exit('r');
'Ȕ': Exit('U');
'ȕ': Exit('u');
'Ȗ': Exit('U');
'ȗ': Exit('u');
'Ș': Exit('S');
'ș': Exit('s');
'Ț': Exit('T');
'ț': Exit('t');
'Ȟ': Exit('H');
'ȟ': Exit('h');
'ȡ': Exit('d');
'Ȥ': Exit('Z');
'ȥ': Exit('z');
'Ȧ': Exit('A');
'ȧ': Exit('a');
'Ȩ': Exit('E');
'ȩ': Exit('e');
'Ȫ': Exit('O');
'ȫ': Exit('o');
'Ȭ': Exit('O');
'ȭ': Exit('o');
'Ȯ': Exit('O');
'ȯ': Exit('o');
'Ȱ': Exit('O');
'ȱ': Exit('o');
'Ȳ': Exit('Y');
'ȳ': Exit('y');
'ȴ': Exit('l');
'ȵ': Exit('n');
'ȶ': Exit('t');
'ȷ': Exit('j');
'ȸ': Exit('d');
'ȹ': Exit('q');
'Ⱥ': Exit('A');
'Ȼ': Exit('C');
'ȼ': Exit('c');
'Ƚ': Exit('L');
'Ⱦ': Exit('T');
'ȿ': Exit('s');
'ɀ': Exit('z');
'Ƀ': Exit('B');
'Ʉ': Exit('U');
'Ɇ': Exit('E');
'ɇ': Exit('e');
'Ɉ': Exit('J');
'ɉ': Exit('j');
'Ɍ': Exit('R');
'ɍ': Exit('r');
'Ɏ': Exit('Y');
'ɏ': Exit('y');
'ɓ': Exit('b');
'ɕ': Exit('c');
'ɖ': Exit('d');
'ɗ': Exit('d');
'ɛ': Exit('e');
'ɟ': Exit('j');
'ɠ': Exit('g');
'ɡ': Exit('g');
'ɢ': Exit('G');
'ɦ': Exit('h');
'ɧ': Exit('h');
'ɨ': Exit('i');
'ɪ': Exit('I');
'ɫ': Exit('l');
'ɬ': Exit('l');
'ɭ': Exit('l');
'ɱ': Exit('m');
'ɲ': Exit('n');
'ɳ': Exit('n');
'ɴ': Exit('N');
'ɶ': Exit('O');
'ɼ': Exit('r');
'ɽ': Exit('r');
'ɾ': Exit('r');
'ʀ': Exit('R');
'ʂ': Exit('s');
'ʈ': Exit('t');
'ʉ': Exit('u');
'ʋ': Exit('v');
'ʏ': Exit('Y');
'ʐ': Exit('z');
'ʑ': Exit('z');
'ʙ': Exit('B');
'ʛ': Exit('G');
'ʜ': Exit('H');
'ʝ': Exit('j');
'ʟ': Exit('L');
'ʠ': Exit('q');
'ʣ': Exit('d');
'ʥ': Exit('d');
'ʦ': Exit('t');
'ʪ': Exit('l');
'ʫ': Exit('l');
'ʰ': Exit('h');
'ʲ': Exit('j');
'ʳ': Exit('r');
'ʷ': Exit('w');
'ʸ': Exit('y');
'ˡ': Exit('l');
'ˢ': Exit('s');
'ˣ': Exit('x');
else Exit('?');
end;
end;
function AccentedNameToAscii(aUTF8Name: String): String;
var
p, pEnd: Pchar;
i, j: Integer;
s: String;
begin
Result := '';
p := PChar(aUTF8Name);
pEnd := p;
Inc(pEnd, Length(aUTF8Name));
repeat
i := UTF8CodepointSize(p);
case i of
1: Result += p^;
else
begin
SetLength(s{%H-}, i);
for j := 1 to i do
begin
Inc(p, j-1);
s[j] := p^;
end;
Result += NameChrToASCII(s);
end;
end;
Inc(p);
until p >= pEnd;
end;
var
strs: TStringDynArray;
s: String;
begin
strs := TStringDynArray.Create('Les Bruyères', 'Centre Médical Héliporté',
'Vésale Heliport', 'Saïss Airport',
'Fès-Boulemane', 'Léopold', 'Kédougou',
'Cesária', 'Évora', 'São', 'Ploče', 'Otočac',
'Čakovec', 'Almería', 'León', 'León',
'Logroño-Agoncillo', 'Suárez', 'Compiègne',
'Tréport', 'Périgueux', 'Targé', 'Châtellerault',
'Épernay', 'Pápa', 'Pécs-Pogány', 'Győr-Pér', 'Pér');
for s in strs do
Writeln(s,' -> "',AccentedNameToAscii(s),'"');
WriteLn(#10'Press [Enter] to finish');
ReadLn;
end.