2011-08-10 3 views
4

가능한 중복 :
Determine a string's encoding in C#C# 문자열의 인코딩을 확인하는 방법이 있습니까?

내가 문자열이 다른 생성하지만 경우, 문자열 UTF8에 기본값을 만들 경우 내가 믿고 내가 처리하기 전에 별도의 안전 할 그것의 인코딩이 무엇인지 확인하십시오. 문자열이나 Encoding 클래스를 사용하여 쉽게 인코딩 할 수는 없습니다. 내가 뭔가를 놓치고 또는 C# 문자열을 항상 UTF8 상관없이 무엇입니까? C#에서

+0

문자열에 *가 있는지 생각한 적이 있습니까? 인코딩 또는 UTF-8로 기본 설정되어 있습니까? 자세한 내용은 내 대답을 참조하십시오.하지만 그 느낌을 어디서 얻었는지 궁금해서 ... –

답변

7

문자열 UTF 있습니다 인코딩, 효율적으로 ... 또는 당신은 그들이 char 값의 순서임을 감안 UTF-16으로 모두 볼 수 없습니다 (물론, .NET) -16 코드 단위.

그러나 일반적으로 문자열에서 이진 형식 (예 : 소켓 또는 파일)으로 변환 할 때 인코딩을 신경 써야합니다. 이 시점에서 인코딩을 명시 적으로 지정해야합니다. 문자열 자체에는 인코딩이 없습니다.

UTF-8에 "기본 설정"하는 유일한 측면은 인코딩을 허용할지 여부를 결정하기 위해 오버로드되는 .NET API가 많고 인코딩이 지정되지 않은 경우 UTF-8이 사용된다는 것입니다. File.ReadAllText이 그 예입니다. 그러나 파일을 읽은 후에 "UTF-8 파일에서 읽은 텍스트"와 "Big5 파일에서 읽은 텍스트"와는 구별되지 않습니다.

+0

문자열의 char 값이 16 비트 코드 ** 단위 ** 시퀀스가 ​​아닌 코드 ** 포인트 * * 전체 유니 코드의 경우 21 비트가 필요합니다. 나는 당신이 더 잘 알지만, UTF-16 저주는 많은 프로그래머들을 괴롭 히고, 그들에게 똑바로 말할 수있는 모든 기회는 가치가있다. 16 비트 문자로 유니 코드 문자를 저장할 수 없습니다. 그것을 위해서는 32 비트 정수가 필요합니다. – tchrist

+0

@tchrist : 나는 그 둘의 둘레에 어떤 방법 으로든 항상 잊는다. 나는 그것을 올바르게 받아 들일만한 가치가 있다고 완전히 동의합니다. 요즘 저는 다시 잘못 이해하는 일이 없도록 니모닉을 제안 할 것입니다 ... –

+0

니모닉을 사용하면 단위에 치수가 있고 점에 무 차원이 도움이 될 수 있습니다. UTF-8에는 8 비트 코드 단위가 있고 UTF-16에는 16 비트 코드 단위가 있지만 코드 포인트 자체는 비트 너비가없는 abstact 정수입니다. 네, 좋아요, 그래서 여러 단위가 한 점을 만들지는 않습니다. Lemme이 조금 생각합니다. – tchrist

관련 문제