2011-02-22 8 views
0

내 레일 사이트에는 사용자 이름의 처음 5 문자 만 표시 할 수있는 충분한 공간이있는 UI가 있습니다. 따라서 다음과 같이 표시 할 문자열을 자릅니다.루비 한자 문자열 문제

@user.name[0..4] 

이름이 영어 인 경우 작동합니다. 그러나 @user.name에 중국어 (멀티 바이트) 문자가 포함되어 있으면 두 가지 문제가 발생합니다. 첫 번째 문제는 [0..4]이 5가 아니라 2 자까지만 제공한다는 것입니다. 두 번째 문제는 마지막 문자가 가끔 반으로 줄어들고 화면에 가비지가 나타나는 경우입니다.

루비에서 멀티 바이트 문자를 처리하는 비교적 깨끗한 방법이 있는지 궁금합니다.

+8

루비 버전 :

가 무엇을 기반으로, 당신은 같은 일을 시도 할 수 있습니다? 멀티 바이트 지원이 1.9에 추가되었습니다. –

+0

예 멀티 바이트로 무엇이든하면 1.8x의 지원이 좋지 않다는 것을 강력히 권합니다. –

+0

ruby ​​1.8.7을 사용하고 있습니다. 업그레이드하는 것이 다소 고통 스럽습니다. 수동으로 1.8x에서 일어날 수있는 방법이 있습니까? – tstyle

답변

3

Here's Ruby 1.8 및 멀티 바이트 지원 (또는 오히려 그 부족)에 관한 훌륭한 기사입니다.

# this should get you first 4 characters of the string: 
your_chinese_string.scan(/./mu)[0,4].join 
+0

이 솔루션이 작동 함을 확인했습니다. 나는 그것이 왜 작동하는지 약간 혼란 스럽다. 따라서 스캔 (/./ mu) 부분은 UTF8 문자를 배열에 넣습니다. 그럼에도 불구하고 고맙습니다! – tstyle