2017-12-01 33 views
0

알았습니다.이 질문이 너무 자주 반복된다는 것을 알고 있습니다. 그러나 지금까지는 해결책을 찾지 못했습니다. iTextSharp를 사용하여 PDF에서 추출합니다. 영어는 잘 작동하지만 아랍어의 경우 항상 "???????"을 보여줍니다. .txt 인 에서 콘솔과 "Ó å의 æ A는 E"이 내 코드아라비아 문자를 pdf에서 문자열 C로 #

private static string ReadPdfFile(string fileName) 
    { 
     StringBuilder text = new StringBuilder(); 


     if (File.Exists(fileName)) 
     { 
      PdfReader pdfReader = new PdfReader(fileName); 
      ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy(); 
      string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, 1, strategy); 
      //currentText = Encoding.UTF8.GetString(UTF8Encoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText))); 
      text.Append(currentText); 
     } 

     return text.ToString(); 
    } 

갱신입니다 :

문제는 내가 지금 출력 파일 의 UTF8을 사용하여 해결

이 2 더 많은 문제

는 "ا ل ت ق د ي م ت م"대신 "تم التقديم"의 그렇게 보여줍니다

  1. 글자 사이의 공백을 제거해야합니다.

  2. 단어의 순서가 거꾸로됩니다.

+0

보통, 유니 코드는 PDF 파일에 UTF-16BE''에있다. –

+0

나는 utf8, utf16 (유니 코드), utf32 및 ascii를 시도했다. 아무것도 작동하지 않으므로 인코딩이 아닌 것 같습니다. –

+0

이 페이지는 아랍어 인코딩을 몇 가지 언급합니다 : https://baheyeldin.com/arabization/history-of-arabic-on-computers.html. 시도해보십시오. –

답변

0

는 "오 å æ á É"을 변환하려면 다음 코드를 시도 할 "س ه و ل ة"

public static string Arabic1256ToUtf8(string data) 
{ 
    var latin = Encoding.GetEncoding("ISO-8859-1"); 
    var bytes = latin.GetBytes(data); // get the bytes for your ANSI string 

    var arabic = Encoding.GetEncoding("Windows-1256"); // decode it using the correct encoding 
    return arabic.GetString(bytes); 
} 
+0

메소드 이름 ('Arabic1256ToUtf8')은 약간 기만적입니다. 'GetRepairedArabicFrom'과 같은 것을 제안 할 것입니다. –