다양한 언어로 유니 코드 지원에 대한 정보를 풀링 할 수있는 정식 장소를 갖고 싶습니다. 그것은 핵심 언어의 일부입니까? 도서관에서 제공됩니까? 전혀 사용할 수 없습니까? 언어로 유니 코드 정보에 대한 리소스가 많이 있습니까? 답변 하나당 하나의 언어를 사용하십시오. 또한 언어를 쉽게 찾을 수있는 제목으로 만들 수 있다면.
Perl은 기본적으로 내장 된 유니 코드를 지원합니다. 일종의. perldoc에서 :
Python 3k (또는 3.0 또는 3000)에는 텍스트 (유니 코드) 및 데이터를 처리하는 새로운 접근 방식이 있습니다.
텍스트 대. 데이터 대신 유니 코드 대. 8 비트. 또한보십시오유니 코드 HOWTO.
.NET과 마찬가지로 Java는 내부적으로 UTF-16을 사용합니다.java.lang.String
에이
String
UTF-16 형식의 문자열을 나타냅니다.보조 문자에 의해 표현된다.서로 게이트 쌍(섹션유니 코드 문자 표현~ 안에Character
자세한 내용은 클래스 참조). 색인 값 참조char
코드 단위이므로 보충 문자는String
.
Q 명령은 대부분의 구현에서 완전한 유니 코드를 지원합니다.
Delphi 2009는 유니 코드를 완벽하게 지원합니다. 그들은 구현을 변경했습니다.string
16 비트 유니 코드 인코딩으로 기본 설정하고 타사 라이브러리를 포함한 대부분의 라이브러리가 유니 코드를 지원합니다. 마르코 칸투 (Marco Cantù 's)델파이와 유니 코드.
Delphi 2009 이전에는 유니 코드에 대한 지원이 제한되었지만WideChar
과WideString
16 비트 인코딩 된 문자열을 저장합니다. 만나다델파이의 유니 코드더 많은 정보를 위해서.
유니 코드를 사용하지 않고도 이중 언어 CJKV 응용 프로그램을 개발할 수 있습니다. 예를 들어,시프트 JIS일본어로 인코딩 된 문자열은 일반 텍스트를 사용하여 저장할 수 있습니다.AnsiString
.
.NET 상점현내부적으로System.Char
사물. 하나System.Char
UTF-16을 나타냅니다.코드 단위.
에 대한 MSDN 설명서System.Char
:
.NET Framework는Char유니 코드를 나타내는 구조 캐릭터. 유니 코드 표준 각 유니 코드 문자를 식별합니다. a라는 고유 한 21 비트 스칼라 숫자 코드 포인트를 정의하고 UTF-16을 정의합니다. 방법을 지정하는 인코딩 양식 코드 포인트가 시퀀스로 인코딩 됨 하나 이상의 16 비트 값 마다 16 비트 값 범위는 16 진수입니다. 0x0000에서 0xFFFF까지 저장되며 에이Char구조.
추가 자료 :
Tcl 문자열은 유니 코드 문자의 시퀀스 였으므로Tcl 8.1(1999). 내부적으로, 그들은 UTF-8 사이에서 동적으로 변형됩니다 (엄격하게Java와 동일한 수정 된 UTF-8취급으로 인해U+00000
문자) 및 UCS-2 (물론 호스트 엔디안 및 BOM에서). OS와 통신하는 데 사용되는 것을 포함하여 모든 외부 문자열 (한 가지 예외)은 내부적으로 유니 코드이므로 호스트에 필요한 인코딩으로 변환되거나 통신 채널에서 수동으로 구성됩니다. 예외는 데이터가있는 위치입니다.두 통신 채널간에 복사 됨직접 복사없는 이진 전송이 사용되는 일반적인 인코딩 (및 여기에 관련되지 않은 몇 가지 다른 제한 사항)이 있습니다.
현재 BMP 외부의 문자는 내부적으로나 외부 적으로 처리되지 않습니다. 이는 알려진 문제입니다.
R6RS 계획
유니 코드 5.1 구현이 필요합니다. 모든 문자열은 '유니 코드 형식'입니다.
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이 시스템 문자 세트로 구성되어있는 경우) 다음을 사용하여 파일을 작성하십시오fopen
UTF-8로 인코딩 된 문자열을 전달하면 올바르게 명명 된 파일이 만들어집니다.
C ++의 상황은 매우 유사합니다 (std::string
->std::wstring
), 그러나 적어도 일종의 노력을해야합니다.표준 라이브러리의 유니 코드 지원.
char*
UTF-8로 인코딩 된 문자열 - dan04
파이썬 2에는 클래스가 있습니다.str
과unicode
.str
객체 저장소 바이트,unicode
객체는 UTF-16 문자를 저장합니다. 대부분의 라이브러리 함수는 두 가지 모두를 지원합니다 (예 :os.listdir('.')
~의 목록을 반환합니다.str
,os.listdir(u'.')
~의 목록을 반환합니다.unicode
사물). 둘 다있다.encode
과decode
행동 양식.
파이썬 3은 기본적으로 이름이 변경되었습니다.unicode
에str
. 파이썬 3은str
유형이 될 것이다.bytes
.bytes
~을 가지고있다.decode
과str
~encode
방법.Python 3.3 이후
str
객체는 메모리를 절약하기 위해 내부적으로 여러 인코딩 중 하나를 사용합니다. 파이썬 프로그래머에게는 여전히 추상적 인 유니 코드 시퀀스처럼 보입니다.
파이썬은 다음을 지원합니다.
파이썬은 다음을 지원 / 제한적으로 지원하지 않습니다 :
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 프로그램에 있다고 생각합니다.
녹의 끈 (std::String
과&str
)는 항상 유효한 UTF-8이며 null 종결자를 사용하지 않으므로 결과가 C / C ++ 등으로 배열처럼 색인화 될 수 없습니다. 이동과 같이 슬라이스 될 수 있습니다.get
1.20 이후로, 코드 포인트의 중간 부분을 잘라내는 것이 실패 할 것이라는 경고와 함께.
녹이 또한있다.OsStr
/OsString
호스트 OS와 상호 작용하기위한 것입니다. Unix의 바이트 배열입니다 (바이트 시퀀스 포함). Windows에서는 WTF-8 (Windows 및 Javascript에서 허용되는 부적절하게 형성된 유니 코드 문자열을 처리하는 UTF-8의 수퍼 세트)입니다.&str
과String
자유롭게 변환 될 수있다.OsStr
또는OsString
, 다른 방법으로 은밀한 수표가 필요합니다. 잘못된 유니 코드를 사용하지 못하거나 유니 코드 대체 문자로 바꾸십시오. (도 있습니다Path
/PathBuf
, 그냥 포장지 주위에OsStr
/OsString
).
또한CStr
과CString
타입은 Null로 끝나는 C 문자열을 나타냅니다.OsStr
Unix에서는 임의의 바이트를 포함 할 수 있습니다.
Rust는 UTF-16을 직접 지원하지 않습니다. 하지만 변환 할 수 있습니다.OsStr
창에서 UCS-2로
내가 Ruby에서 찾을 수있는 유일한 물건은 꽤 오래되었고 rubist가별로 없다. 얼마나 정확한지 모르겠다.
기록을 위해 Ruby는 utf8을 지원하지만 멀티 바이트는 지원하지 않습니다. 일반적으로 내부적으로는 문자열이 바이트 벡터라고 가정합니다. 라이브러리 및 트릭을 사용하여 일반적으로 작업을 수행 할 수 있습니다.
찾았습니다.이리.
Ruby 1.9는 문자열에 인코딩을 연결합니다. 이진 문자열은 "ASCII-8BIT"인코딩을 사용합니다. 기본 인코딩은 대개 모든 현대 시스템에서 UTF-8이지만 모든 타사 라이브러리 함수가이 인코딩에서 항상 문자열을 반환한다고 가정 할 수는 없습니다. 다른 인코딩을 반환 할 수 있습니다 (일부 yaml 파서는 일부 상황에서이를 수행합니다). 서로 다른 인코딩의 두 문자열을 연결하면힘~을 얻다Encoding::CompatibilityError
.
아크에는 유니 코드 지원이 없습니다.아직.
루아 5.3은 내장되어있다.utf8
라이브러리는 UTF-8 인코딩을 처리합니다. 그것은 당신이 일련의 코드 포인트를 대응하는 바이트 시퀀스와 다른 방법으로 변환하고 길이 (문자열의 코드 포인트 수)를 얻고 코드 포인트를 반복하여 문자열의 바이트 위치를 얻습니다.엔번째 코드 포인트. 또한 패턴 일치 기능에서 사용할 패턴을 제공합니다.string
UTF-8 바이트 시퀀스와 일치합니다.
루아 5.3은 문자열 리터럴에서 사용할 수있는 유니 코드 코드 포인트 이스케이프 시퀀스를 가지고 있습니다 (예를 들어,"\u{61}"
...에 대한"a"
). UTF-8 바이트 시퀀스로 변환됩니다.
루아 소스 코드는 UTF-8 또는 ASCII 문자가 1 바이트를 차지하는 모든 인코딩으로 인코딩 될 수 있습니다. UTF-16과 UTF-32는 바닐라 루아 통역사가 이해하지 못합니다. 그러나 문자열에는 인코딩이나 임의의 이진 데이터가 포함될 수 있습니다.