2011-08-06 4 views
3

UTF-8 문자열을 UCS-2 문자열로 변환하려고합니다. "\ uFF0D \ uFF0D \ u6211 \ u7684 \ u4E0A \ u7F51 \ u4E3B \ u9875"와 같은 문자열을 가져와야합니다. 지금까지 약 1 개월 동안 봤지만 여전히 UTF-8을 UCS-2로 변환하는 것에 대한 참조는 없습니다. 제발 도와주세요. Thx 사전에.누구나 Objective-c에서 UTF-8 값을 UCS-2 값으로 변환하는 방법을 알려 줄 수 있습니까?

편집 : 좋아, 아마도 내 설명이 충분하지 않을 수 있습니다. 여기 내가하려는 일이 있습니다. 저는 한국에 살고 CTMessageCenter를 사용하여 SMS 메시지를 보내려고합니다. 내 앱을 통해 중국어 간체 문자를 보내려고했습니다. 그리고 나는 ???? 적절한 문자 대신. 그래서 UTF-8, UTF-16, BE 및 LE도 시도했습니다. 그러나 그들은 모두 돌아온다. ??. 마지막으로 SMS는 한국에서 UCS-2와 EUC-KR 인코딩을 사용한다는 것을 알게되었습니다. 이상하지 않니? 어쨌든 \ u4E3B \ u9875와 같은 문자열을 보내려고했지만 제대로 작동했습니다. 그래서 먼저 문자열을 UCS-2 인코딩으로 변환하고 해당 문자열에서 문자열 리터럴을 가져와야합니다.

+0

"\ uFF0D \ uFF0D \ u6211 \ u7684 \ u4E0A \ u7F51 \ u4E3B \ u9875"는 UCS-2 문자열이 아닙니다. 오히려'\ u' 이스케이프 시퀀스를 사용하여 유니 코드 코드 포인트에 의해 지정된 문자를 포함하는 C 또는 Objective-C 문자열 리터럴입니다. UCS-2 또는 문자열 리터럴이 정말로 필요합니까? – Codo

+0

UCS-2 인코딩과 문자열 리터럴이 필요합니다. –

+0

UCS-2는 본질적으로 UTF-16과 같습니다. –

답변

2

Wikipedia :

오래된 UCS-2 (2 바이트 범용 문자 집합) 1996 년 7 월 유니 코드 표준 버전 2.0에서 UTF-16으로 대체 된 유사한 문자 인코딩이다. 2 간단히 코드 포인트를 16 비트 코드 단위로 사용하여 고정 길이 형식 을 생성하고 범위의 모든 코드 포인트 중 96.9 %에 대해 UTF-16과 정확히 동일한 결과 인 을 생성합니다. 범위는 0-0xFFFF입니다. 그 당시에는 값이 할당 된 모든 문자.

IBM는 :

UCS-2 표준은 65,535 문자 및 가공 산업은 94,000 이상의 문자를 필요로하는 데이터에 한정되어 있기 때문에

의 UCS-2 표준 는 대체되는 과정에있다 유니 코드 UTF-16 표준. UTF-16은 기존의 상위 UCS-2 표준 이기 때문에 것처럼 응용 프로그램이 UCS-2를 치료로

그러나 한 UCS-2 지원을 기존의 시스템을 사용하여 응용 프로그램을 개발할 수 있습니다 UTF-16

uincode.org

:

UCS-2는 대리 코드 포인트 전에, 유니 코드 1.1까지 유니 코드 구현을 의미하고 UTF-16은 표준의 버전 2.0에 추가 된 사용되지 않는 용어입니다. 이 용어는 지금 피해야합니다.

UTF-16 및 UCS-2 은 데이터 교환 목적으로 동일하기 때문에 UCS-2는 고유 한 데이터 형식을 정의하지 않습니다.둘 다 16 비트이고 정확하게 코드 단위 표현을 사용합니다.

따라서 대부분의 언어 라이브러리에서 "UTF8toUnicode"변환을 사용하면 기본적으로 UCS-2 인 UTF-16이 생성됩니다. Objective-C 문자열에서 16 비트 문자를 추출하면 똑같은 결과를 얻을 수 있습니다.

다른 말로하면, 해결책은 당신을 계속 쳐다보고 있습니다.

+0

'UTF8toUnicode'는 UTF-8이 이미 유니 코드이므로 어떤 의미가있는 함수 이름이 아닙니다. 이것은 내게 멍청한 마이크로 소프트 버그처럼 들린다. – tchrist

+0

일반 용어로 사용하고 있습니다. 대부분의 언어 라이브러리는 UTF-16을 "유니 코드"로 지칭합니다. –

+0

저는 유니 코드를 10 년 이상 사용해 왔으며, "유니 코드"는 Java가 원래 UTF-16을 참조한 방법입니다. 유니 코드가 원래 발명되었을 때, 모든 의도와 목적을 위해 UTF-32가 존재하지 않았으며 그것이 "정확"한지 여부에 관계없이 "유니 코드"및 "UTF-16"은 상호 교환 가능한 용어로 취급되었습니다. –

0

UCS-2는 유효한 유니 코드 인코딩이 아닙니다. UTF-8입니다.

따라서 UTF-8을 UCS-2로 변환 할 수 없습니다. 실제로는 역으로도 변환 할 수 없습니다.

UCS-2는 오래된 역사입니다. 그것은 평화롭게 썩게하십시오.

+0

실제로 모든 UTF-8 문자열을 UCS-2로 변환 할 수있는 것은 아니지만 실제로는 많은 것들이 가능합니다. 또한 많은 시스템과 문자열 라이브러리는 다른 인코딩으로 변환 할 수없는 문자를 처리하는 여러 가지 방법을 지원합니다. 모든 UTF-8 문자열을 ISO-8859-1로 변환 할 수는 없지만 실제로는 매우 자주 수행해야합니다. 당신은 당신의 대답에 약간 가혹합니다. – Codo

+0

@Codo : 올바른 Unicode 인코딩이 아니므로 UTF-8을 UCS-2로 변환 할 때 UTF-8을 Latin1로 변환하는 것은 거의 의미가 없습니다. 그러나 모든 Latin1 코드 포인트는 유효한 UTF-8로 표시 될 수 있습니다. 이것은 UCS-2에서는 사실이 아닙니다. 그것은 대칭적인 상황이 아닙니다. Apple ioS 파일 시스템은 어쨌든 UCS-2를 사용하고 있습니다. 그것은 아주 나쁜 NFD 형식의 UTF-16을 사용하는 것 같습니다. 이 질문은 유니 코드의 개념에 대해 불분명 한 퍼지 생각을 배제합니다. – tchrist

+1

나는 너가 방법의 출발점이라고 생각한다. 내가하려는 일은 UTF-8에서 UCS-2로 변환하는 방법을 찾는 것입니다. 그리고 C# 또는 다른 언어로 여러 가지 방법으로 작업 할 수 있습니다. –

관련 문제