2017-09-20 8 views
-3

다른 언어로 서버에 로그온하면 "عاتبوها. txt"라고 표시되지만 "????? .txt ". 이제 로그 생성하는 로그 파일에 서버와 데이터를 확인하는 파일도 괜찮서버에 파일 (로그)을 다른 언어로 작성하려고합니다. english_name.txt는 "عاتبوها. txt"가 서버에 "?????. txt"를 표시합니다.

BufferedWriter bw = null; 
FileWriter fw = null; 
String label = "label test"; 

// this content comming dynamic value from another method. 
String content = "هذا هو اختبار عينة يرجى اختبار"; 
// this content comming dynamic value from another method. 
String room = "اختبار"; 


Date date = new Date(); 
     try { 
       String dt = sdf.format(date); 
       //String convertedRoom = new String(room.getBytes("UTF-8")); 
       String fileName = room.concat("_").concat(dt).concat(".txt"); 
       File f = new File(fileName); 
       if(!f.exists()) { 
        f.createNewFile(); 
        f.setWritable(true); 
       } 
       fw = new FileWriter(fileName,true); 
       bw = new BufferedWriter(fw); 

       bw.write(content); 

       bw.flush(); 
      } catch (IOException e) { 
       //e.printStackTrace(); 
      } finally { 
       try { 
        if (bw != null) 
         bw.close(); 
        if (fw != null) 
         fw.close(); 
       } catch (IOException ex) { 
        //ex.printStackTrace(); 
       } 
      } 

...하지만 문제는에서 생성되지 않는 파일 이름입니다 :

코드는 다음과 단절에 로그 파일을 작성하는 arebic.txt와 같은 또 다른 언어, 그 표시 ???????????. _. txt ... 도와주세요.

+0

''string convertedRoom = new String (room.getBytes ("UTF-8"));'무엇을 생각하십니까? 이를 제거하면 불필요하고 잠재적으로 유해 할 수 있습니다. – Kayaman

+0

utf-8을 사용하여 테레비 전어로 사용하십시오. –

+0

그건 완전히 잘못되었습니다. 그것을 꺼내. 그런 생각을 어떻게 내놓았습니까? 작동하지 않습니다. – Kayaman

답변

0

처음에는 Java 소스에서 아랍어 텍스트를 올바르게 번역하기 위해 Java 컴파일러가 컴파일 할 때와 동일한 인코딩 (charset)으로 편집해야하는 사소한 문제가 있습니다. 아랍어의 문자열 리터럴과 u 리셉션의 아랍어 인 "\u....\u...."을 비교하여 테스트 할 수 있습니다.

여기에는 파일 이름과 파일 내용의 두 가지 문제가 있습니다. 파일 이름은 앞서 언급 한 사소한 문제를 확인하십시오. 그래도 문제가 해결되지 않으면 UTF-8 로켈으로 애플리케이션 서버를 실행해야합니다. Linux 도움말을 살펴보십시오.

Windows에서 파일 이름은 실제로 내 자리에서 작동하지 않습니다. zip 라틴 문자로 파일을 작성하고 UTF-8 파일 이름을 사용할 수 있습니다.

변환 된 바이트가 UTF-8 (또는 아랍어 Windows-1256)이되도록 파일 내용을 변환해야합니다. 여기서 FileWriter/FileReader는 기본 인코딩을 사용하고 다른 클래스와 같이 인코딩을 지정할 수 없으므로 사용할 수 없습니다. 텍스트는 Windows의 경우 그런데


String room = "اختبار"; 
    System.out.println("room = " + uescape(room)); 
    room = "\u0627\u062e\u062a\u0628\u0627\u0631"; 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    Date date = new Date(); 
    String dt = sdf.format(date); 
    String fileName = room + "_" + dt + ".txt"; 
    Path f = Paths.get(fileName); 
    try (BufferedWriter bw = Files.newBufferedWriter(f, StandardCharsets.UTF_8, 
       StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { 

     bw.write("\r\n=s=" + label + "====" + date.toString() + "====>"); 
     bw.write(content); 
     bw.write("=e=" + date.toString() + "===>\r\n"); 
    } catch (IOException e) { 
     // FIXME Do something with the exception... 
    } 
} 

private static String uescape(String room) { 
    StringBuilder sb = new StringBuilder(); 
    sb.append('\"'); 
    for (char ch : room.toCharArray()) { 
     if (32 <= ch && ch < 127) { 
      sb.append(ch); 
     } else { 
      sb.append(String.format("\\u%04x", 0xFFFF & ch)); 
     } 
    } 
    sb.append('\"'); 
    return sb.toString(); 
} 

, \n (LF) 대신 \r\n (CR-LF)를 사용합니다.

+0

기호 [ERROR] 기호를 찾을 수 없습니다 : 클래스 경로를 찾을 수 없습니다 기호 [ERROR] 기호 : 변수 StandardCharsets 찾을 수없는 기호 [ERROR] 기호 : 변수 StandardOpenOption : 클래스 –

+0

필요성을 도와주세요은이 일부 "수입품 수정"조치; 'import java.nio.file.Path; '등등. –

+0

귀하의 IDE를 가져 –