Egloos | Log-in


modern perl 스타일로 한글 자르기

Perl Cookbook 2nd edition에서 유니코드 핸들링 참고

use v5.10;
use Encode;

my $kor = decode 'utf-8', "안녕하세요 Hello";
say encode 'utf-8', $kor;

my @lx = $kor =~ /(\X)/g;
say "length is " . scalar(@lx);
say encode 'utf-8', $lx[0] 

결과는 아래처럼
>>
안녕하세요 Hello
length is 11

by 코퍼스 | 2018/03/23 14:02 | 트랙백 | 덧글(2)

트랙백 주소 : http://corpus.egloos.com/tb/7399929
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by luzluna at 2018/03/24 21:32
소스코드 자체가 utf8로 인코딩되어있는 경우 소스 안에 quote 되어있는 utf8 string(즉 한글 따옴표 스트링)을 정상적으로 perl internal unicode로 인식시켜주는것이 더 올바른 표현법이 됩니다. 그래서
```
use utf8; # 이 파일 자체가 utf8로 인코딩되어 있음을 미리 알려줌
use v5.10;
use Encode;

my $kor = "안녕하세요 Hello";
...
```
이렇게 해주면 $kor 자체가 internal unicode variable이 됩니다.

나머지 코드는 그대로 쓰셔도 됩니다만 출력할때 매번 encode 'utf8'을 부르면 출력을 자주 하는 경우에 귀찮거나 불편할 수 있습니다. 그런때에 STDOUT으로 나갈때는 모두 utf8 으로 인코딩해라 라는 의미로 다음과 같이 쓰시면 불편함을 줄이실 수 있습니다.
```
binmode STDOUT, ":utf8";
...
say $lx[0];
```

유니코드 어려워요~^^ 랭귀지 자체에서 유니코드 제대로 잘 지원하는 언어도 꽤 드물고...
Commented by 코퍼스 at 2018/03/26 09:53
좋은 팁과 친절한 설명 감사드립니다.

사실 'use utf8' 선언은 알고는 있었는데, 제가 요새 블로그를 일종의 기록장 처럼 쓰고 있어서 생략했는데, 보시는 분들도 있거늘, 그 점을 미처 고려못한 것 같습니다.

binmode 팁은 다음 부터는 꾸준히 활용해 보도록 할께요.
고맙습니다~~

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶