언어에 따라 다릅니다. 여러 언어가 아닌 ASCII를 탈출 할 필요 없다, 그러나 당신은 소스를 인코딩하기에 어떤 컴파일러에게 할 수 있습니다 예를 들면 다음과 같습니다.
$ java -encoding UTF-8 SomeThing.java
또는
$ perl -Mutf8 somescript
비록 펄 같은 것들로 , 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 소스 코드의 문자를 넣어. 탈출구를 찾아야 만한다면, 훨씬 편리하지 않습니다.
이스케이프를 사용하려는 경우 글자 그대로 ASCII가 아닌 문자를 지정하는 방법은 언어에 따라 다릅니다. 자바에서는 \uXXXX
를 통해 asquerous 자바 프리 프로세서를 사용할 수 있습니다
String s = "e\u0301le\u0300ve";
을 나는 그런 식으로하지 않는 것이 좋습니다 있지만. 두 번째 메커니즘은 그것이 자바 전처리 후 무엇인지 알아 내려고 노력에서 당신을 여분
String s = "e\\u0301le\\u0300ve";
그건 : 그것은 패턴에 사용되는 것, 당신은 같은 시간에 보간, 깨끗하고 지저분를 지연시킬 수 있습니다 (\u0022
을 사용할 수는 없지만 \\0022
을 사용할 수는 있지만) Pattern.CANON_EQ 플래그를 고정시킵니다.
대부분의 다른 언어는 자바를 사용하는 좀 더 간단한 방법을 사용합니다. 소스로 java -encoding UTF-8
을 사용하지 않으면 못생긴 UTF-16을 사용합니다. UTF-16 대리인을 하드 코딩하는 것은 완전히 바보입니다. 하지마!!
펄에서 당신은 사용할 수 있습니다
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";
이 모든 것들이 코드에 하드 코딩 된 매직 넘버보다 훨씬 뛰어납니다.
이 모든 것은 사용자 언어가 유니 코드를 지원한다고 가정하지만 많은 사용자는이를 지원하지 않습니다.
C++을 사용하는 경우 [ICU regex library] (http://userguide.icu-project.org/strings/regexp)를 적극 권장합니다. 답안에서 설명하는 방식으로 상징적 인 이름을 사용할 수 있습니다. 아마도 PCRE를 사용할 수도 있지만 C++이 아닌 C의 PCRE 만 사용했습니다. – tchrist
@tchrist : 다시 한번, 당신은 믿을 수 없을만큼 유용한 팁을 제공합니다. 고맙습니다! 나는이 권고를 장기간에 걸쳐 명확히 따르 겠지만, 지금은 내장 된 wxRegEx 라이브러리를 사용하여 얻을 필요가있다. –