2010-08-04 4 views
8

EXIFextractor이라는 라이브러리를 사용하여 이미지에서 메타 데이터 정보를 추출합니다. 이 lib 부분은 System.Drawing.Imaging.PropertyItem을 사용하여 모든 노력을 다하고 있습니다. 이미지 세부 사항 등의 PropertyItem의 일부 데이터는 Microsoft 설명서에 따라 바이트 []로 저장된 ASCII 문자열로 페치됩니다.C# : 바이트 []을 UTF8로 인코딩 된 문자열로 변환

제 문제는 국제 문자 (å, ä, ö, 등등)를 삭제하고 물음표로 바꾸는 것입니다. 코드를 디버깅 할 때 byte []가 UTF-8 표현임을 알 수 있습니다.

바이트 []을 UTF8 문자열로 구문 분석하고 싶습니다. 프로세스의 정보를 잃어 버리지 않고 어떻게 할 수 있습니까? 사전에

감사합니다!


업데이트 : 첫 번째 조각은 내가 사용하는 클래스,이 작성한 즉 EXIFextractor.cs에서입니다

: 내 코드에서 조각을 제공하기 위해 요청을받은

Asim Goheer

foreach(System.Drawing.Imaging.PropertyItem p in parr) 
{ 
string v = ""; 

       // ... 

else if(p.Type == 0x2) 
{ 
    // string  
    v = ascii.GetString(p.Value); 
} 

그리고 이것은 내 코드를 처리하기 위해 최선을 다합니다. 그는 위의 결과.

   try { 
    EXIFextractor exif = new EXIFextractor(ref bmp, ""); 
    object o; 
        if ((o = exif["Image Description"]) != null) 
         MediaFile.Description = Tools.UTF8Encode(o.ToString()); 

는 또한 데이터에서, ä, ö 내 소중한 å을 받고 다른 몇 가지 방법을 시도했지만 아무것도 트릭을 할 것 같다. 나는 Hans Passant가 그의 대답에서 그의 결론에 대해 아래에 있다고 생각하기 시작했다.

+0

ASCII 인코딩을 사용하여 정보를 읽으면 비 ASCII 문자가 올바르게 읽히지 않습니다. 인코딩을 가진이 문자 읽기와 바이트 배열 쓰기는 올바르게 작동하지 않습니다. 이 경우에 해당하는 문서에 연결할 수 있습니까? –

+1

다른 하이퍼 링크를 게시 할 수있는 경우 여기에 있습니다. http://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem.type.aspx – dotmartin

답변

32
string yourText = System.Text.Encoding.UTF8.GetString(yourByteArray); 
+1

신속한 답변 주셔서 감사합니다. 그러나 나는 이미 이것을 시도했다. 불운. 원본 (이미지 파일)이 처음에 올바르게 인코딩되었는지 궁금해지기 시작했습니다. – dotmartin

+0

예제를 공유 할 수 있다면 우리는 자체적으로 확인하거나 시도 할 수 있습니다. – Scoregraphic

+1

물론. 나는이 책을 처음 접했기 때문에 그것을 대답이나 코멘트 또는 이것을하기 위해 선호되는 방법으로 제공해야합니까? – dotmartin

1

다른 인코딩을 시도해 볼 수 있습니까? UTF16, 유니 코드? 처음 엔 인코딩이 제대로되었는지 잘 모르는 경우 다른 exif 리더로 exif 메타 데이터를보십시오.

2

예, 이미지를 처음 만든 앱이나 카메라에 문제가 있습니다. EXIF 표준은 텍스트에 대한 끔찍한 지원을 가지고 있으며 ASCII로 인코딩되어야합니다. 사진 작가가 영어를 말할 때만 효과가 있습니다. 의심 할 여지없이 이미지를 인코딩 한 소프트웨어가이 요구 사항을 무시하고 있습니다. PropertyItem 클래스가 수행하는 것은 시스템의 기본 코드 페이지를 가정하는 Marshal.StringToHGlobalAnsi()를 사용하여 문자열을 byte []로 인코딩합니다.

사진이 컴퓨터에서 너무 멀리 떨어져있을 때 mojibake가 표시됩니다.

+1

이것은 내가 기대했던 것입니다. 필자는 포토샵과 XMP에 의해 만들어진 툴이 일을 똑바로 할 수 있기를 여전히 바라고 있었다. 문제를 해결하기 위해 수행 할 수있는 작업에 대한 제안 사항이 있습니까? 우리 회사는 인코딩이 잘못된 파일이 너무 많아서 배치 프로세서를 선호합니다. – dotmartin

+0

바이트 배열에서 로케일에 따라 모든 바이트가 올바른지 여전히 사실입니까? 그렇다면 UTF8/ASCII 대신 로케일을 사용하여 인코딩/디코딩을 시도 할 수 있습니다. http://msdn.microsoft.com/en-us/library/system.text.encoding.getencoding.aspx – Scoregraphic

+0

행운을보십시오. 나는 아직도 questionmarks을 얻는다. – dotmartin

관련 문제