문제

하나는 일은 내가 결코 진정으로 이해의 개념이 문자 인코딩이 있습니다.방법은 인코딩을 메모리에서 처리되는 코드 종종황에서 나는 복사본을 예없이 인터넷에서 진정으로 이해합니다.이것이 정말 중요하고 훨씬 간과 주제는 더 많은 사람들은 시간을 가지고 오른쪽으로(나 자신을 포함하여).

내가 찾는 것은 몇 가지 좋은,지점,자원,학습을 위한 다양한 유형의 문자 인코딩과 그들 사이의 변환나(C#).모두 책과 온라인 리소스가 환영합니다.

감사합니다.


편집 1:

답변 주셔서 감사합니다.나는 특히 일부에 대한 더 많은 정보를 포함하는 방법.NET 손잡이 인코딩이 있습니다.내가 이것을 알고 보일 수 있는 막연한지 정말로 알고 무엇을 부탁드립니다.내 호기심으로 어떻게 인코딩은 말로 표현에서는 C#string 클래스는지 여부와 클래스 자체를 관리할 수 있는 다른 인코딩 형식 또는 있는 별도의 클래스에 대한 이?

도움이 되었습니까?

해결책

나는 이 질문에 시작한다: 는 무엇입니까?

  • 논리적 id:a 코드포인트.유니코드 번호를 할당합의 각 문자는 반드시 관련된 모든 비트를 바이트 형태입니다.인코딩(UTF-8 과 같은)매핑을 정의하여 byte 값입니다.
  • 비트와 바이트:이 코딩 형식.하나 이상의 당 바이트 코드포인트,값에 의해 결정됩 인코딩을 사용합니다.
  • 일 화면에 표시:a .의 기소에서 만들어 하나 이상의 코드.이것은 물건에서 최종 프레젠테이션의 것들입니다.

이 코드 변환 in.txtwindows-1252 하기 UTF-8 로 저장합니다 out.txt.

using System;
using System.IO;
using System.Text;
public class Enc {
  public static void Main(String[] args) {
    Encoding win1252 = Encoding.GetEncoding(1252);
    Encoding utf8 = Encoding.UTF8;
    using(StreamReader reader = new StreamReader("in.txt", win1252)) {
      using(StreamWriter writer = new StreamWriter("out.txt", false, utf8)) {
        char[] buffer = new char[1024];
        while(reader.Peek() > 0) {
          int r = reader.Read(buffer, 0, buffer.Length);
          writer.Write(buffer, 0, r); 
        }
      }
    }
  }
}

변환 두 가지 여기 일어난다.첫 번째 바이트는 디코딩에서 windows-1252 하기 UTF-16 (약 endian,나는 생각한다)로 char 버퍼입니다.다음 버퍼로 UTF-8.

코드

몇 가지 예를 들어 코드 포인트:

  • U+0041 가 라틴어 대문자 A (A)
  • U+00A3 가 파운드 표시 (£)
  • U+042F 가 키릴 문자자 YA (Я)
  • U+1D50A 가 수학 FRAKTUR 자본 G (𝔊)

인코딩

어디에서든지 당신과 함께 작업한 문자,그것은에서 인코딩의 일부 형태입니다.C#UTF-16 한 char 형식, 는 그것으로 정의하는 16 비트이 넓습니다.

생각할 수 있습으로 인코딩 테이블 사이의 매핑은 코드포인트 및 바이트로 표현합니다.

CODEPOINT       UTF-16BE        UTF-8     WINDOWS-1252
U+0041 (A)         00 41           41               41
U+00A3 (£)         00 A3        C2 A3               A3
U+042F (Ya)        04 2F        D0 AF                -
U+1D50A      D8 35 DD 0A  F0 9D 94 8A                -

시스템입니다.텍스트입니다.인코딩 클래스가 노출 유형/법을 수행합 변환을 수행합니다.

제자

의 기소를 화면에 표시될 수 있습 건설에서 하나 이상의 코드포인트이다.문 e-급성(é)표현할 수 있는 두 개의 코드포인트, LATIN 소문자 E U+0065 고 결합하는 급성 악센트 U+0301.

('é'더 일반적으로 표현으로 단일 코드포인트 U+00E9.사이를 전환할 수 있습을 사용하여 그들을 정규화.하지 않는 모든 결합하는 순서 하나의 문자와 동등한다.)

결론

  • 을 인코딩할 때는 C#문자열을 인코딩을 수행할 변화에 UTF-16 하는 인코딩이 있습니다.
  • 인코딩할 수 있는 손실이 있는 변신-가장 non-유니코드 인코딩할 수 있습만 인코드의 하위 집합은 기존 문자입니다.
  • 하지 때문에 모든 코드포인트에 넣을 수 있는 하나의 C#문자,숫자의 문자에서 문자열 수보다 더 많은 수의 코드포인트와 숫자의 코드보다 높을 수 있습 숫자의 렌더링된 제자.
  • 는"길이"문자열은 컨텍스트에 맞는,그래서 당신은 알아야 할 무엇을 의미하신 적용 및 사용에 적합한 알고리즘이 있습니다.이를 처리하는 방법에 의해 정의된 프로그래밍 언어를 사용합니다.
  • 주는 라틴-1 문자가 동일한 값에서 많은 인코딩은 일부 사람들의 망상 ASCII.

(이것은 좀 더 긴-호흡보다 저는 의도,그리고 아마 이상의 당신이 원하는,그래서 멈추도록 하겠습니다.썼다는 더 많은 장황한 포스트에서 Java 를 인코딩하기.)

다른 팁

키는 아주 좋은 설명의 문자 인코딩에서 일반적인: http://en.wikipedia.org/wiki/Character_encoding.

을 찾는 경우 자세한 내용은 UTF-8,하나의 가장 인기 있는 문자 인코딩을 읽어보아야 합니다 UTF-8 고 유니코드 FAQ.

그리고,이미 지적, "최소한으로 모든 소프트웨어 개발자가 절대적으로 긍정적으로 이에 대해 알고 있어야 합니코드와 캐릭터 설정(No Excuses!)" 매우 좋은 초보자를습니다.

가의 유명한 조엘 문서"최소한으로 모든 소프트웨어 개발자가 절대적으로 긍정적으로 이에 대해 알고 있어야 합니코드와 캐릭터 설정(No Excuses!)" http://www.joelonsoftware.com/articles/Unicode.html

편집:하지만 그것에 대해 더 많은 텍스트 포맷에 다시 읽고 나는 생각에 더 관심이 있는 것과 같은 html 인코딩하고 url 을 인코딩?은 탈출을 위해 특별한 문자는 어떤 중요한 의미 내에서는 html 또는 url 을(예를 들어 < 과>html,또는?고=url)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top