안녕하세요.
홈서버에서 아이폰에 메시지를 보내는 스크립트를 돌리고 있습니다.
스크립트 내용 중에는 메시지 내용이 길 경우,
적절하게 잘라서 보내는 내용이 들어가 있습니다.
예를 들어서 아래와 같은 내용입니다.
[code:pnkuhk24]
message=123abc[]가나다라마바사아자차카타파
echo $message | cut -b -19
[/code:pnkuhk24]
메시지 내용이 영어나 숫자이면 아무 문제 없는데요.
한글이나 일어 등 유니코드가 들어갈 경우
영어 숫자등과 섞이거나 해서 잘려진 메시지에 이상한 코드가 섞였을 경우
아이폰 쪽에서 문제가 되네요.
제가 추측하기로는 아마도
[code:pnkuhk24]
message=123abc[]가나다라마바사아자차카타파
echo $message | cut -b -20 > tmp.txt
[/code:pnkuhk24]
하면 아래와 같이 결과 문장이 깨끗한데
[code:pnkuhk24]
tmp.txt
123abc[]가나다라
[/code:pnkuhk24]
[code:pnkuhk24]
echo $message | cut -b -19 > tmp.txt
[/code:pnkuhk24]
위의 예처럼 메시지 내용에 따라서 위와 같이 잘렸을 경우
아이폰에서 보면 문장 끝에 ??같은 이상한 코드가 섞이네요…
예를 들어 위의 결과를 vim으로 보면 아래와 같습니다.
[code:pnkuhk24]
tmp.txt
123abc[]ê°<80>ë<82><98>ë<8b>¤ë<9d>
[/code:pnkuhk24]
설명이 잘 되었나 모르겠는데…
메시지의 내용과 관계없이 깨끗하게 한글 문장을 자르고 싶습니다.
아니면 잘라낸 후에 ??같은걸로 보이는 부분을 없애는 방법도 좋은데요
뭔가 방법이 없을까요?
python에서는 대충 아래와 같이 하고 있습니다만
역시 한글이 깨끗하게 잘리지 않을 경우가 있습니다.
[code:pnkuhk24]
tmp="123abc[]가나다라마바사아자차카타파"
message=tmp[0:19].strip()
[/code:pnkuhk24]
해결책을 찾고 있는데 제 실력으로는 힘드네요.
도움 말씀을 부탁드립니다.
oseb1
(oseb)
1월 5, 2014, 3:50오전
2
cut의 fedora는 unicode patch가 되어 있는데 우분투는 아직 그대로라네요.
대안으로 awk 같은 걸로 자를 수 있는데, 글자수가 한글도 영숫자처럼 한 자 길이로 헤아리는군요.
$ echo $message | awk ‘{print substr($0,0,10)}’
123abc[]가나
http://pkgs.fedoraproject.org/cgit/core ... b;id2=HEAD
스크립트로 한글 시작 바이트만 처리해주면 되는데 그건 함수를 만들어서 하면 되겠지만
아직 거기까진 학습 못했습니다.
oseb1
(oseb)
1월 5, 2014, 4:35오전
3
하필 책 마지막 부분에 보는 중 문자열에 대한 게 있네요.
bash 확장중에 하나입니다. 특징이 처리가 빠르다네요.
$ echo ${message:0:10}
abc123가나다라
${parameter:offset:Length}
offset이 -면 끝에서 시작, Length는 0보다 커야 함
bash에서는
[code:1h7gtt29]
message=123abc[]가나다라마바사아자차카타파
echo $message | cut -b -19 | iconv 2>/dev/null > tmp.txt
[/code:1h7gtt29]
python에서는
[code:1h7gtt29]
tmp="123abc[]가나다라마바사아자차카타파"
print unicode(tmp[0:19],errors="ignore")
[/code:1h7gtt29]
oseb1
(oseb)
1월 5, 2014, 6:25오전
5
오… iconv를 추가로 넣으니 질문한대로 그렇게 처리가 되네요.
oseb님, protochaos님
답변 감사합니다.
oseb님이 설명해주신 방법도
protochaos님이 설명해주신 방법도 잘 되는군요.
덕분에 bash에서의 문제는 해결한거 같습니다.
다만 python은 아직 안되네요.
[quote="protochaos":24q2nl2a]
python에서는
Code:
tmp="123abc[]가나다라마바사아자차카타파"
print unicode(tmp[0:19],errors="ignore")[/quote:24q2nl2a]
[code:24q2nl2a]
>>> tmp="123abc[]가나다라마바사아자차카타파"
>>> print unicode(tmp[0:19],errors="ignore")
123abc[]
[/code:24q2nl2a]
한글 부분이 에러처리 되는건지
한글 및 유니코드가 전부 사라집니다.
좋은 방법 없을까요?
도움 부탁드립니다.
[quote="yanagi":256k52ni]
[code:256k52ni]
>>> tmp="123abc[]가나다라마바사아자차카타파"
>>> print unicode(tmp[0:19],errors="ignore")
123abc[]
[/code:256k52ni]
한글 부분이 에러처리 되는건지
한글 및 유니코드가 전부 사라집니다.
좋은 방법 없을까요?
도움 부탁드립니다.[/quote:256k52ni]
음 python2.7에서 기본 인코딩의 문제로 보이네요.
[code:256k52ni]
#!/usr/bin/env python
-- coding: utf-8 - -
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
tmp="123abc[]가나다라마바사아자차카타파"
print unicode(tmp[0:19],errors="ignore")
[/code:256k52ni]
기본적으로 ascii로 인코딩해서, unicode 함수가 제대로 동작하지 않는 듯 한데,
위의 import sys 에서 부터 세줄이 그걸 utf-8로 인코딩을 설정해주는 것입니다.
protochaos님
답변 감사합니다.
말씀대로 환경설정을 하니
제대로 돌아가는군요.
한참 고민하던 문제인데 잘 해결되어서 뿌듯합니다.
감사합니다.