나는 그것에서 유니 코드를 포함
"JPMorgan Chase \x{0026} Co"
로 변환하고 싶습니다. (큰 따옴표와 작은 따옴표의 차이점에 유의하십시오.)
가장 쉬운 방법은 무엇입니까? 이것은 단순화 된 예입니다. 실제 문제에는 그러한 많은 경우가 있습니다.
나는 그것에서 유니 코드를 포함
"JPMorgan Chase \x{0026} Co"
로 변환하고 싶습니다. (큰 따옴표와 작은 따옴표의 차이점에 유의하십시오.)
가장 쉬운 방법은 무엇입니까? 이것은 단순화 된 예입니다. 실제 문제에는 그러한 많은 경우가 있습니다.
당신이 처리 할 필요가있는 유일한 탈출 형식은 \x{1234}
다음, 정규 표현식으로 이스케이프 시퀀스와 일치하는 문자를 16 진수 문자열로 변환 chr(hex($1))
을 사용할 수 있습니다이 문제를 처리 한 후 하나의 방법 인 경우 :
my $x = 'JPMorgan Chase \x{0026} Co';
$x =~ s/\\x\{([0-9a-f]+)\}/chr(hex($1))/e;
say $x; # -> "JPMorgan Chase & Co"
duskwuff & mob가 직접 질문에 답변하는 훌륭한 일을하는 동안. (FWIW : mob의 $x = eval qq{"$x"}
은 부인할 수없는 우아함을 가지고 있습니다.) 실제 질문은 보간 문자열 이외의 다른 곳에서 Perl 문자를 이스케이프 처리하는 이유입니다.
%26
당신이 당신의 소스 코드 (IO)보다 어딘가 다른에서이 문자열을 받고 있으며, 원시 유니 코드 인코딩을 inappropreate 경우, 펄 쉽게 사용할 모듈을 갖고있는보다 일반적인 인코딩을 고려&
\u0026
... 그리고 많은 다른 사람. 이러한 인코딩은 IPC 및 데이터 파일을 다른 시스템과 훨씬 더 상호 운용 할 수있게합니다.
... 물론이 경우 은 Perl 소스에서입니다. 이중 따옴표로 묶어 컴파일러 단계에서 보간하도록하십시오.
'$ x = eval qq { "$ x"}'? – mob
이것은 실제로 작동합니다. 고마워! –
참고 [\ x 대체 안 함] (https://stackoverflow.com/q/39992351/2173773) –