27

다양한 언어로 유니 코드 지원에 대한 정보를 풀링 할 수있는 정식 장소를 갖고 싶습니다. 그것은 핵심 언어의 일부입니까? 도서관에서 제공됩니까? 전혀 사용할 수 없습니까? 언어로 유니 코드 정보에 대한 리소스가 많이 있습니까? 답변 하나당 하나의 언어를 사용하십시오. 또한 언어를 쉽게 찾을 수있는 제목으로 만들 수 있다면.


  • 답변이 언어별로 단 하나의 답변으로 인해 서로 경쟁하지 않으면 투표는 어떻게 해석되어야합니까? "대답의 유용성", 평소와 같이 또는 아마도 "해당 언어로 된 유니 코드 지원의 전반적인 품질" :) - Jonik
  • 별로 모르겠다. 나는 그들이 유용한 정보를 제공했다고 생각했을 때 투표를했습니다. - baudtack
  • 사람들이 대답을 향상시키고 확장하기를 원하기 때문에 나는 그것을 CW로 만들었습니다. 제 희망은 언어 X로 유니 코드 지원을 찾으려고 할 때, 여기에 와서 유용한 정보를 찾을 수 있다는 것입니다. - baudtack
  • CW는 확실히 여기에 맞습니다. 주제에 관해 말할 각오가있는 "올바른"답변이 많이 있습니다. (답변을 투표하기위한 좋은 기준이 무엇인지는 알 수 없습니다.) - Donal Fellows

20 답변


11

Perl은 기본적으로 내장 된 유니 코드를 지원합니다. 일종의. perldoc에서 :

  • 퍼 루니 투트Perl에서 유니 코드 사용에 대한 자습서. 유니 코드 (Unicode)까지해야하는 것과하지 말아야 할 것에 대해 절대적으로 많이 가르쳐줍니다. 기초를 다룹니다.
  • 퍼 루니 파크Perl의 유니 코드에 대한 FAQ.
  • 펄 루니 인트로Perl에서 유니 코드 소개. 보다 "설교"퍼 루니 투트.
  • 퍼런 코드- 당신이 절대적으로 모든 것을 알아야 할 때 유니 코드와 펄에 대해 알고 있어야합니다.


  • 좋은 대답! 이것은정확하게내가 바라는 종류의 물건. - baudtack
  • 대부분의 정보를 유니 코드 장에 포함 시켰습니다.효과적인 펄 프로그래밍. 문서를 펼친다는 것을 이해하는 것은 그렇게 재미 있지 않았습니다. - brian d foy

8

Python 3k

Python 3k (또는 3.0 또는 3000)에는 텍스트 (유니 코드) 및 데이터를 처리하는 새로운 접근 방식이 있습니다.

텍스트 대. 데이터 대신 유니 코드 대. 8 비트. 또한보십시오유니 코드 HOWTO.


7

자바

.NET과 마찬가지로 Java는 내부적으로 UTF-16을 사용합니다.java.lang.String

에이StringUTF-16 형식의 문자열을 나타냅니다.보조 문자에 의해 표현된다.서로 게이트 쌍(섹션유니 코드 문자 표현~ 안에Character자세한 내용은 클래스 참조). 색인 값 참조char코드 단위이므로 보충 문자는String.


7

HQ9 +

Q 명령은 대부분의 구현에서 완전한 유니 코드를 지원합니다.


4

델파이

Delphi 2009는 유니 코드를 완벽하게 지원합니다. 그들은 구현을 변경했습니다.string16 비트 유니 코드 인코딩으로 기본 설정하고 타사 라이브러리를 포함한 대부분의 라이브러리가 유니 코드를 지원합니다. 마르코 칸투 (Marco Cantù 's)델파이와 유니 코드.

Delphi 2009 이전에는 유니 코드에 대한 지원이 제한되었지만WideCharWideString16 비트 인코딩 된 문자열을 저장합니다. 만나다델파이의 유니 코드더 많은 정보를 위해서.

유니 코드를 사용하지 않고도 이중 언어 CJKV 응용 프로그램을 개발할 수 있습니다. 예를 들어,시프트 JIS일본어로 인코딩 된 문자열은 일반 텍스트를 사용하여 저장할 수 있습니다.AnsiString.


4

가기

Google의프로그래밍 언어로 이동유니 코드를 지원하며 UTF-8과 호환됩니다.


3

자바 스크립트

JS 1.3 이전에는 유니 코드에 대한 지원이 없었던 것 같습니다. 1.5부터는 UTF-8, UTF-16 및 UCS-2가 모두 지원됩니다. 문자열, 정규식 및 식별자에서 유니 코드 이스케이프 시퀀스를 사용할 수 있습니다.출처


  • 내가 아는 한, 대부분의 브라우저 구현은 여전히 UCS-2의 어두운 시대에 머물러있는 것 같습니다. - cikkle

3

.NET (C #, VB.NET, ...)

.NET 상점내부적으로System.Char사물. 하나System.CharUTF-16을 나타냅니다.코드 단위.

에 대한 MSDN 설명서System.Char:

.NET Framework는Char유니 코드를 나타내는 구조   캐릭터. 유니 코드 표준   각 유니 코드 문자를 식별합니다.   a라는 고유 한 21 비트 스칼라 숫자   코드 포인트를 정의하고 UTF-16을 정의합니다.   방법을 지정하는 인코딩 양식   코드 포인트가 시퀀스로 인코딩 됨   하나 이상의 16 비트 값 마다   16 비트 값 범위는 16 진수입니다.   0x0000에서 0xFFFF까지 저장되며   에이Char구조.

추가 자료 :


3

Tcl

Tcl 문자열은 유니 코드 문자의 시퀀스 였으므로Tcl 8.1(1999). 내부적으로, 그들은 UTF-8 사이에서 동적으로 변형됩니다 (엄격하게Java와 동일한 수정 된 UTF-8취급으로 인해U+00000문자) 및 UCS-2 (물론 호스트 엔디안 및 BOM에서). OS와 통신하는 데 사용되는 것을 포함하여 모든 외부 문자열 (한 가지 예외)은 내부적으로 유니 코드이므로 호스트에 필요한 인코딩으로 변환되거나 통신 채널에서 수동으로 구성됩니다. 예외는 데이터가있는 위치입니다.두 통신 채널간에 복사 됨직접 복사없는 이진 전송이 사용되는 일반적인 인코딩 (및 여기에 관련되지 않은 몇 가지 다른 제한 사항)이 있습니다.

현재 BMP 외부의 문자는 내부적으로나 외부 적으로 처리되지 않습니다. 이는 알려진 문제입니다.


3

R6RS 계획

유니 코드 5.1 구현이 필요합니다. 모든 문자열은 '유니 코드 형식'입니다.


3

C / C ++

기음

C99이 유니 코드를 지원하지 않기 전에 C. 0으로 끝나는 문자 배열을 사용합니다 (char*또는char[])를 문자열로 사용합니다. 에이char바이트 (8 비트)로 지정됩니다.

C99 지정wcs- 옛 기능에 추가로 기능str함수 (예 :strlen->wcslen). 이 함수들은wchar_t*대신에char*.wchar_t와이드 문자 유형을 나타냅니다. 의 크기wchar_t컴파일러에 따라 다르며 8 비트만큼 작을 수 있습니다. 다른 컴파일러는 실제로 다른 크기를 사용하지만 일반적으로 16 비트 (UTF-16) 또는 32 비트 (UTF-32)입니다.

대부분의 C 라이브러리 함수는 UTF-8에 투명합니다. 예 : 운영 체제가 UTF-8을 지원하고 (그리고 UTF-8이 시스템 문자 세트로 구성되어있는 경우) 다음을 사용하여 파일을 작성하십시오fopenUTF-8로 인코딩 된 문자열을 전달하면 올바르게 명명 된 파일이 만들어집니다.

C ++

C ++의 상황은 매우 유사합니다 (std::string->std::wstring), 그러나 적어도 일종의 노력을해야합니다.표준 라이브러리의 유니 코드 지원.


  • wchar_t에 저장된 텍스트는 마술처럼 유니 코드가되지 않습니다. 그러나 괜찮은 C 프로그래머라면 마술처럼 C.에서 아무것도 작동하지 않는다는 것을 알아야합니다. :) - Chris Lutz
  • C와 C ++은 유니 코드를 통해 다음과 같이 똑같이 정확합니다.char*UTF-8로 인코딩 된 문자열 - dan04
  • UTF-8은 C ++에서 사용하기에 더 유용한 인코딩이라고합니다. 만나다stackoverflow.com/questions/1049947/…그리고 그것은 기본적으로 char *를 통해 지원됩니다. - Pavel Radzivilovsky

3

파이썬

파이썬 2에는 클래스가 있습니다.strunicode.str객체 저장소 바이트,unicode객체는 UTF-16 문자를 저장합니다. 대부분의 라이브러리 함수는 두 가지 모두를 지원합니다 (예 :os.listdir('.')~의 목록을 반환합니다.str,os.listdir(u'.')~의 목록을 반환합니다.unicode사물). 둘 다있다.encodedecode행동 양식.

파이썬 3은 기본적으로 이름이 변경되었습니다.unicodestr. 파이썬 3은str유형이 될 것이다.bytes.bytes~을 가지고있다.decodestr~encode방법.Python 3.3 이후 str객체는 메모리를 절약하기 위해 내부적으로 여러 인코딩 중 하나를 사용합니다. 파이썬 프로그래머에게는 여전히 추상적 인 유니 코드 시퀀스처럼 보입니다.

파이썬은 다음을 지원합니다.

  • 인코딩 / 디코딩
  • 표준화
  • 간단한 대소 문자 변환 및 공백으로 분리
  • 그들의 이름으로 등장 인물 찾기

파이썬은 다음을 지원 / 제한적으로 지원하지 않습니다 :

  • 데이터 정렬 (제한적)
  • 대 / 소문자 사이에 1 : 1 매핑이없는 특별한 대소 문자 변환
  • 정규 표현식 (그것은 효과가있다.)
  • 텍스트 분할
  • 양방향 텍스트 처리

참조 :Python의 유니 코드에 대한 진실


  • Python 버전에 대한 요약과 언급이 좋을 것입니다 (이 기사는 구식이며 Python 3을 처리하지 못할 수도 있습니다). - Joachim Sauer
  • '500 내부 서버 오류'가 표시됩니다. 그 링크에. - ulidtko

2

Common Lisp (SBCL 및 CLisp)

에 따르면,SBCLCLisp유니 코드를 지원합니다.


2

목표 -C

C 문자열 라이브러리의 일부로 사용할 수있는 것을 제외하고는 기본 제공되지 않습니다.

그러나 일단 프레임 워크를 추가하면 ...

재단 (코코아 및 코코아 터치) 및 핵심 재단

NSString과 CFString은 모두 유니 코드 기반의 문자열 클래스 (구현 세부 사항으로 실제로는 여러 클래스)를 구현합니다. 두 개는 "유료 브리지"로되어있어 하나의 API가 다른 인터페이스의 인스턴스와 함께 사용될 수 있으며 반대의 경우도 마찬가지입니다.

텍스트를 반드시 나타내지는 않는 데이터의 경우 NSData 및 CFData가 있습니다. NSString은 메서드를 제공하며 CFString은 텍스트를 데이터로 인코딩하고 텍스트를 데이터에서 디코딩하는 기능을 제공합니다. Core Foundation은 모든 형태의 UTF를 포함하여 100 가지가 넘는 다양한 인코딩을 지원합니다. 인코딩은 두 그룹으로 나뉩니다.내장 인코딩, 어디서나 지원되며외부 인코딩, 적어도 Mac OS X에서 지원됩니다.

NSString은 D, KD, C 또는 KC 형식으로 정규화하는 메소드를 제공합니다. 각각은 새로운 문자열을 반환합니다.

NSString과 CFString은 다양한 비교 / 조합 옵션을 제공합니다. 여기있다.Foundation의 비교 옵션 플래그코어 파운데이션의 비교 옵션 플래그. 그것들은 모두 동의어는 아닙니다. 예를 들어, Core Foundation은 리터럴 (엄격한 코드 포인트 기반) 비교를 기본값으로 만드는 반면, Foundation은 비 리터럴 비교 (악센트가있는 문자가 동일하게 비교할 수 있도록 허용)를 기본값으로 만듭니다.

Core Foundation에는 Objective-C가 필요하지 않습니다. 실제로 C 또는 C ++을 사용하는 Carbon 프로그래머에게 Foundation의 기능 대부분을 제공하기 위해 만들어졌습니다. 그러나, 나는 그것의 가장 현대적인 사용법이 Objective-C 또는 Objective-C ++로 작성된 Cocoa 또는 Cocoa Touch 프로그램에 있다고 생각합니다.


2

D는 UTF-8, UTF-16 및 UTF-32 (각각 char, wchar 및 dchar)를 지원합니다. 모든 유형의 표를 찾을 수 있습니다.이리.


2

녹의 끈 (std::String&str)는 항상 유효한 UTF-8이며 null 종결자를 사용하지 않으므로 결과가 C / C ++ 등으로 배열처럼 색인화 될 수 없습니다. 이동과 같이 슬라이스 될 수 있습니다.get1.20 이후로, 코드 포인트의 중간 부분을 잘라내는 것이 실패 할 것이라는 경고와 함께.

녹이 또한있다.OsStr/OsString호스트 OS와 상호 작용하기위한 것입니다. Unix의 바이트 배열입니다 (바이트 시퀀스 포함). Windows에서는 WTF-8 (Windows 및 Javascript에서 허용되는 부적절하게 형성된 유니 코드 문자열을 처리하는 UTF-8의 수퍼 세트)입니다.&strString자유롭게 변환 될 수있다.OsStr또는OsString, 다른 방법으로 은밀한 수표가 필요합니다. 잘못된 유니 코드를 사용하지 못하거나 유니 코드 대체 문자로 바꾸십시오. (도 있습니다Path/PathBuf, 그냥 포장지 주위에OsStr/OsString).

또한CStrCString타입은 Null로 끝나는 C 문자열을 나타냅니다.OsStrUnix에서는 임의의 바이트를 포함 할 수 있습니다.

Rust는 UTF-16을 직접 지원하지 않습니다. 하지만 변환 할 수 있습니다.OsStr창에서 UCS-2로


1

PHP

이미전체 스레드이것에 관해서는 SO!


1

루비

내가 Ruby에서 찾을 수있는 유일한 물건은 꽤 오래되었고 rubist가별로 없다. 얼마나 정확한지 모르겠다.

기록을 위해 Ruby는 utf8을 지원하지만 멀티 바이트는 지원하지 않습니다. 일반적으로 내부적으로는 문자열이 바이트 벡터라고 가정합니다. 라이브러리 및 트릭을 사용하여 일반적으로 작업을 수행 할 수 있습니다.

찾았습니다.이리.

루비 1.9

Ruby 1.9는 문자열에 인코딩을 연결합니다. 이진 문자열은 "ASCII-8BIT"인코딩을 사용합니다. 기본 인코딩은 대개 모든 현대 시스템에서 UTF-8이지만 모든 타사 라이브러리 함수가이 인코딩에서 항상 문자열을 반환한다고 가정 할 수는 없습니다. 다른 인코딩을 반환 할 수 있습니다 (일부 yaml 파서는 일부 상황에서이를 수행합니다). 서로 다른 인코딩의 두 문자열을 연결하면~을 얻다Encoding::CompatibilityError.


  • Ruby에는 많은 유즈 케이스에서 유니 코드를 사용하는 데 버그가 있습니다.redmine.ruby-lang.org/issues/show/2034 - Eduardo
  • Ruby가 인코딩을 처리하는 방식이 바보 같다고 생각합니다. IMO 문자열과 바이트 배열은 두 가지가되어야합니다. 문자열은 그와 연관된 어떤 인코딩도 가져서는 안되며 추상적 인 유니 코드 코드 포인트 시퀀스 여야합니다. 디코딩 바이트 배열을 통해 가져와야하고 인코딩을 통해 문자열에서 바이트 배열을 가져와야합니다. 이것은 다른 현대 언어가하는 대부분의 (모든?) 것입니다. - panzi

0

아크에는 유니 코드 지원이 없습니다.아직.


  • " -1 " 저자가 "유니 코드 지원"과 동일하다는 사실에 기반한 기사 (답이 아님!) "자전거 헛간의 색"으로 변경된다. - Joachim Sauer

0

소요

루아 5.3은 내장되어있다.utf8라이브러리는 UTF-8 인코딩을 처리합니다. 그것은 당신이 일련의 코드 포인트를 대응하는 바이트 시퀀스와 다른 방법으로 변환하고 길이 (문자열의 코드 포인트 수)를 얻고 코드 포인트를 반복하여 문자열의 바이트 위치를 얻습니다.번째 코드 포인트. 또한 패턴 일치 기능에서 사용할 패턴을 제공합니다.stringUTF-8 바이트 시퀀스와 일치합니다.

루아 5.3은 문자열 리터럴에서 사용할 수있는 유니 코드 코드 포인트 이스케이프 시퀀스를 가지고 있습니다 (예를 들어,"\u{61}"...에 대한"a"). UTF-8 바이트 시퀀스로 변환됩니다.

루아 소스 코드는 UTF-8 또는 ASCII 문자가 1 바이트를 차지하는 모든 인코딩으로 인코딩 될 수 있습니다. UTF-16과 UTF-32는 바닐라 루아 통역사가 이해하지 못합니다. 그러나 문자열에는 인코딩이나 임의의 이진 데이터가 포함될 수 있습니다.

연결된 질문


관련된 질문

최근 질문