Это зависит от языка. Во многих языках нет необходимости экранировать не-ASCII, но вам, возможно, придется сообщить компилятору, в какой кодировке находится исходный код. Например:
$ java -encoding UTF-8 SomeThing.java
или
$ perl -Mutf8 somescript
Хотя с такими вещами, как Perl, Python и Ruby, вы можете поместить объявление в файл, обеспечив его совместимость с ASCII. Например:
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
use autodie;
my $s = "Où se trouve mon élève?";
if ($s =~ /élève/) { ... }
# although of course this also works fine:
while ($s =~ /\b(\w+)\b/g) {
print "Found <$1>\n";
}
Это самый простой способ сделать это, и я настоятельно рекомендую его: просто вставьте настоящие символы UTF-8 в исходный код. Если вам нужно выяснить, чтобы избежать вещей, ну, это гораздо менее удобно.
Если вы собираетесь использовать escape-символы, то, как вы указываете не ASCII символически, также зависит от языка. В Java вы можете использовать запрашивающий препроцессор Java через \uXXXX
:
String s = "e\u0301le\u0300ve";
хотя я не рекомендую этот способ. Если он будет использоваться в шаблоне, вы можете отложить интерполяцию, которая является одновременно более чистой и запутанной:
String s = "e\\u0301le\\u0300ve";
Этот второй механизм избавляет вас от попыток выяснить, что это такое после того, как препроцессор Java справился с этим (вы не можете использовать \u0022
, но можете использовать \\0022
), но затем он испортит ваш шаблон .CANON_EQ flag.
Большинство других языков имеют более простой способ сделать это, чем Java - который также настаивает на уродливом UTF-16, если вы не используете java -encoding UTF-8
в качестве источника. Жесткое кодирование суррогатов UTF-16 абсолютно идиотское. Не делай этого !!
В Perl вы можете использовать:
my $s = "e\x{301}le\x{300}ve"; # NFD form
my $s = "\xE9l\xE8ve"; # NFC form
но вы также можете назвать их символически
use charnames qw< :full >;
my $s_as_NFD = "e\N{COMBINING ACUTE ACCENT}le\N{COMBINING GRAVE ACCENT}e";
my $s_as_NFC = "\N{LATIN SMALL LETTER E WITH ACUTE}l\N{LATIN SMALL LETTER E WITH GRAVE}ve";
Последний вариант можно сделать намного короче, если вы предпочитаете:
use charnames qw< :full latin >;
my $s_as_NFC = "\N{e WITH ACUTE}l\N{e WITH GRAVE}ve";
Все они почти бесконечно превосходят жесткие коды магических чисел в вашем коде.
Предполагается, что ваш язык поддерживает Unicode, но многие этого не делают.