2008-09-12 6 views
12

거의 5 년 전 Joel Spolsky가이 기사 ("The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)")를 작성했습니다.유니 코드에 능숙하십니까?

많은 사람들처럼, 나는 이것을 "ASCII 대체"라고 생각하게되었습니다. 불행히도, 5 년 후 나는이 지역의 몇 가지 나쁜 습관으로 빠져 들었다. 너?

많은 국제 인터넷 응용 프로그램을 작성하지는 않지만 많은 ASP.NET 인터넷 웹 사이트를 구축하는 데 도움이되었으므로 그 이유는 아닙니다. 내 이익을 위해 그래서

(그리고 나는 많은 다른 사람을 생각) 나는 다음에 사람들의 일부 입력을 얻을 수 있습니다 : 한 번

  • "극복"하는 방법 ASCII 모든
  • 기본 지침은 작업 할 때 유니 코드.
  • (개발자 용) 유니 코드의 권장 도서 (최근) 및 웹 사이트.
  • 유니 코드의 현재 상태 (Joels의 기사 후 5 년)
  • 향후 지침.

나는 .NET 배경을 가지고 있으므로 .NET Framework의 유니 코드에 대한 정보도 만족해야합니다. 물론 이것은 다른 배경을 가진 사람을 언급해서는 안됩니다.

업데이트 : 이전에 StackOverflow에 대한 질문 : this related question도 참조하십시오.

답변

9

필자는 Joel 기사와 다른 I18n 기사를 읽었으므로 항상 내 문자 인코딩에주의를 기울였습니다. 그리고 당신이 그것을 일관되게한다면 그것은 실제로 효과가 있습니다. UTF-8을 표준으로 사용하는 회사에서 일하면서 모든 사람이 이것을 알고 있습니다/이렇게하면 작동합니다. 여기

주제에 (조엘의 기사 외에) 몇 가지 흥미로운 기사 :

첫 번째 기사에서 인용; 유니 코드를 사용하기위한 팁 :

  • 유니 코드를 껴안으십시오. 그것은 아마도 옳은 일이고, 그렇지 않다면 어쨌든해야 할 것입니다.
  • 소프트웨어 안에는 텍스트를 UTF-8 또는 UTF-16으로 저장하십시오. 말하자면 두 개 중 하나를 골라서 붙이십시오.
  • 가능한 경우 XML을 사용하여 외부 세계와 데이터 교환. 이로 인해 잠재적 인 문제가 사라집니다.
  • 자신의 클라이언트를 작성하는 대신 브라우저 기반으로 애플리케이션을 만들도록하십시오. 브라우저는 세계의 텍스트를 다루는 데 정말로 상당히 능숙 해지고 있습니다.
  • 다른 사람의 라이브러리 코드를 사용하고 있다면 (물론 당신도 마찬가지입니다.) 올바른 것으로 입증 될 때까지 유니 코드 처리가 중단되었다고 가정합니다.
  • 검색을 수행하는 경우 언어 및 문자 처리 문제를 이해하는 사람에게 넘겨보십시오.
  • 아마존 또는 다른 곳으로 가서 인쇄 된 유니 코드 표준의 최신 개정판을 구입하십시오. 그것은 당신이 알아야 할 모든 것을 꽤 잘 담고 있습니다.
  • 유니 코드 웹 사이트를 둘러보고 코드 차트가 작동하는 방식을 배우십시오.
  • 아시아 언어로 어떤 진지한 작업을해야한다면 Ken Lunde의 주제에 대한 O'Reilly 서적을 구입하십시오.
  • 매킨토시를 사용하는 경우, 밖으로 나가서 Lord Pixel의 유니 코드 글꼴 검사 도구를 사용하십시오. 완전히 차가워 요.
  • 실제로 데이터를 다운 받고 더러워야하는 경우 유니 코드 컨퍼런스에서 2 회 참석하십시오. 모든 전문가가 가서 당신이 알아야 할 것이 무엇인지 모를 경우, 알고있는 사람을 찾을 수 있습니다.
+0

감사합니다. – Ash

4

검색 엔진 소프트웨어로 작업하는 동안 나는 페이지의 인코딩에 관한 HTTP 헤더 나 메타 태그로 얼마나 많은 웹 사이트가 콘텐츠를 제공하는지 믿지 않을 것입니다. 종종 ISO-8859 문자와 UTF-8 문자를 모두 포함하는 문서를 얻을 수도 있습니다.

이러한 종류의 문제를 해결하고 나면 정말로 진지하게 제작 한 데이터의 적절한 문자 인코딩을 시작합니다.

2

엄지 손가락 규칙 : 문자열을 둘러 보거나 훑어 보지 않고 엄격하게 데이터 묶음으로 취급하지 않으면 훨씬 나아질 것입니다.

"유니 코드 방식"으로 바꾸려면 간단한 단어 나 작은 문자열을 사용하는 것이 쉽지 않습니다.

"유니 코드 방식"으로하고 싶다면 아주 좋은 라이브러리가 필요합니다. 이 물건은 엄청나게 복잡합니다.

+0

우리가 영어이기 때문에, 대문자로 된 단어 등은 우리에게 의미가 있습니다. 유니 코드가 없어도 – Arafangion

+0

대소 문자를 변경하면 Win32 API 함수 인 'CharUpper'조차도 때로는 오류가 발생하는 것을 인정하고 'LCMapString'을 사용해야합니다. –

3

.NET Framework는 문자열을 저장하기 위해 Windows 기본 인코딩을 사용하며 UTF-16으로 판명됩니다. 대부분의 텍스트 I/O 클래스를 사용할 때 인코딩을 지정하지 않으면 BOM이없는 UTF-8을 작성하고 BOM을 먼저 확인한 다음 UTF-8을 가정하여 읽습니다 (이 경우 StreamReaderStreamWriter이 이 방법은 BOM을 이해하지 못하는 "멍청한"텍스트 에디터에게는 안전하지만 표준 ASCII 범위를 벗어난 문자를 실제로 쓰는 UTF-8 또는 상황을 표시 할 수있는 더 똑똑한 코드에 대해서는 다소 위험합니다.

일반적으로 보이지 않지만 재미있는 방법으로 머리를 뒤로 젖힐 수 있습니다. 어제 XML serialization을 사용하여 StringWriter을 사용하여 객체를 문자열로 직렬화하는 작업을하고 있었고 인코딩이 항상 UTF-16 인 이유를 알 수 없었습니다. 메모리의 문자열은 UTF-16이 될 것이고 .NET에 의해 강제되므로 XML 직렬화 프레임 워크가 할 수있는 유일한 것입니다.

그래서 나는 쓸모없는 도구가 아닌 무언가를 쓸 때 BOM으로 UTF-8 인코딩을 지정합니다. .NET에서 기술적으로 유니 코드를 우연히 인식 할 수 있지만 사용자가 인코딩을 UTF-8로 감지하는 경우에만 가능합니다.

누군가가 "문자열의 바이트를 얻으려면 어떻게해야합니까?"라고 물어볼 때마다 조금 울 것입니다. 제안 된 솔루션은 Encoding.ASCII.GetBytes()을 사용합니다 : (