문제

예를 들면 : "½"또는 ASCII 189. 텍스트 파일에서 바이트를 읽을 때 바이트 []에는 유효한 값,이 경우 189가 포함됩니다.

유니 코드로 변환하면 유니 코드 교체 문자 65533이 발생합니다.

Unicodeencoding.unicode.getString (b);

ASCII로 변환하면 63 또는 "?"

asciiencoding.ascii.getstring (b);

이것이 가능하지 않으면이 데이터를 처리하는 가장 좋은 방법은 무엇입니까? 대체 ()와 같은 문자열 함수를 수행 할 수 있기를 원합니다.

도움이 되었습니까?

해결책

Byte 189는 ISO-8859-1 (일명 "Latin-1")에서 "½"을 나타내므로 다음은 원하는 것일 수 있습니다.

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

.NET의 모든 문자열과 숯은 UTF-16 인코딩되어 있으므로 인코더/디코더를 사용하여 다른 것을 변환해야합니다. 때로는 기본값 (예 : FILESTREAM 인스턴스의 경우 UTF-8)이 항상 지정해야합니다.

어떤 인코딩에 대한 정보를 제공하려면 어떤 형태의 암시 적 또는 더 나은 명시 적 메타 데이터가 필요합니다.

다른 팁

인코딩이 정확히 무엇인지에 따라 다릅니다.

"ASCII 189"와 같은 것은 없습니다. -ASCII는 최대 127 개만 올라갑니다. 처음 128 값에 ASCII를 사용하는 8 비트 인코딩이 많은 인코딩이 있습니다.

5월 원하다 Encoding.Default (특정 시스템의 기본 인코딩이지만) 그러나 확실히 알기가 어렵습니다. 데이터는 어디에서 왔습니까?

이전 PC-8 또는 확장 된 ASCII 문자 세트는 IBM과 Microsoft가 PC 세계에 코드 페이지 아이디어를 소개하기 전에 주변에있었습니다. 이것은 1982 년에 확장 된 ASCII였습니다. 실제로, EGA 카드가 다른 글꼴을 VRAM에로드 할 수있을 때까지 당시 PC에서 사용할 수있는 유일한 문자 세트였습니다.

이것은 또한 ANSI 터미널의 기본 표준이었으며, 80 년대와 90 년대 초에 전화를 걸었던 거의 모든 BBS는 메뉴와 상자를 표시하기 위해이 캐릭터 세트를 사용했습니다.

다음은 8 비트 확장 ASCII를 유니 코드 텍스트로 돌리는 코드입니다. 주요 코드 : getencoding ( "437")을 참고하십시오. 이 코드는 437 페이지를 사용하여 8 비트 ASCII 텍스트를 유니 코드 동등한 것으로 변환했습니다.

    string ASCII8ToString(byte[] ASCIIData)
    {
        var e = Encoding.GetEncoding("437");
        return e.GetString(ASCIIData);
    }

System.String[] 캐릭터를 보관할 수 없습니다 ASCII > 127다음과 같은 확장 된 ASCII 캐릭터에서 작업하려는 경우 œ ¢ ½ ¾여기 이진과 소수점으로 변환하는 방법입니다.

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