2011-07-18 31 views
10

Tôi gặp vấn đề với các tập tin đầu ra từ một chương trình sử dụng eclipse .i thiết thực của tôi sang UTF-8 và vớiđầu ra như mã UTF-8 trong java

System.getProperty("file.encoding") 

tôi nhận ran UTF-8.i prog của tôi thông qua eclipse run-option và đầu ra (một tập tin văn bản) được mã hóa trong UTF-8.but khi tôi nén mã nguồn vào một tệp jar, tệp đầu ra hiển thị lỗi trong một số bảng chữ cái như Ã.what là này diff khi ruuning prog trong eclipse và frm jar tập tin? và tôi có phải xác định đầu ra được mã hóa trong utf-8 trong mã nguồn của tôi? pls giúp đỡ.

sự giúp đỡ từ @dacwe thực sự tạo ra những mong muốn output.but tôi có thể biết làm thế nào tôi có thể chạy thực thi của tôi .jar tập tin bên ngoài dòng lệnh như thế nào có thể các -Dfile.encoding = UTF-8

@dacwe:? I đã thử thay đổi mã nguồn của tôi thành

BufferedWriter bout = new java.io.BufferedWriter(new java.io.OutputStreamWriter(
       new java.io.FileOutputStream(filename), "UTF-8")); 

nhưng đầu ra vẫn chưa được mã hóa chính xác.những gì tôi bỏ lỡ ở đây?

+0

thể trùng lặp của [? Thiết lập mã hóa ký tự Java mặc định] (http : //stackoverflow.com/questions/361975/setting-the-default-java-character-encoding) – dacwe

+1

Đừng làm thế! Ngừng thiết lập các biến môi trường hoặc thuộc tính hệ thống để thiết lập mã hóa để sử dụng. Tất cả các lớp có liên quan trong Java đều có các hàm tạo mã hóa. Chỉ định mã hóa chính xác ở đó và bạn sẽ không bao giờ phải dựa vào cấu hình bên ngoài nữa. –

+0

@ dacwe tôi đã không đề cập đến bất kỳ việc sử dụng System.setProperty ("file.encoding", "UTF-8") trong mã nguồn của tôi.so chạy mã của tôi qua nhật thực chạy luôn tạo ra kết quả mong muốn (tệp được mã hóa utf-8) nhưng không có trong tệp .jar. – reukEN11

Trả lời

1

Khi bạn chạy từ tệp JAR, bạn có đang đặt thuộc tính tệp.encoding bằng -Dfile.encoding không? Nếu không, bạn có thể hoặc

a) mở luồng rõ ràng bằng mã hóa đó. cho điều này, bạn sẽ phải tạo ra một OutputStream và sau đó bọc rằng trong một OutputStreamWriter một cách rõ ràng cho biết mã hóa ký tự.

hoặc

b) thiết lập thuộc tính như điều đầu tiên trong phương pháp chính của bạn sử dụng System.setProperty ("file.endcoding");

lưu ý @dacwe đã chỉ ra điều tôi quên ... đã sửa câu trả lời của tôi.

+0

b) không chính xác. Bạn phải thiết lập 'file.encoding' trước khi JVM khởi động (nó được lưu trữ bởi ví dụ' String' và 'OutputStreamWriter' ..). – dacwe

+0

@ iacwe i sử dụng xuất dưới dạng tệp .jar từ nhật thực để nén mã nguồn của tôi.how chính xác tôi có thể thiết lập thuộc tính này? I nhìn vào nhật thực và nó có tệp .ini, với -Dfile.encoding = UTF-8 ở cuối dòng (theo cách thủ công từ hướng dẫn để đặt ide thành utf). – reukEN11

+0

@ reukEN11: * Nếu bạn không sử dụng mã nguồn của mình trong chương trình, nó không có gì liên quan đến nguồn. * Khởi động ứng dụng của bạn từ một trình bao với: 'java -Dfile.encoding = UTF-8 -jar your-jar- file.jar'. – dacwe

10

Sau một số cuộc thảo luận chính trong câu trả lời của @Dave G!

Sử dụng java -Dfile.encoding=UTF-8 -jar your-jar-file.jar hoạt động.

Cập nhật mã của bạn là @Dave G được đề xuất (và chỉnh sửa của bạn) sẽ hoạt động.

  • Bạn đã thực sự đóng gói lại bình chưa?
  • Bạn có gọi close() trên bout không? (Ví dụ như có thể tập tin của bạn không được cập nhật)

Dưới đây là một ví dụ đầy đủ mà có thể giúp bạn đi:

public static void main(String... args) throws Exception { 
    PrintWriter out = new PrintWriter(new File("hello.txt"), "UTF-8"); 
    out.print("written in utf-8"); 
    out.close(); 
} 
+0

tôi đóng gói lại tệp the.jar sau mỗi thay đổi trong mã nguồn của tôi để xác định đầu ra và cũng bout.close() đã được thêm.không phải công việc đó ngoại trừ khi sử dụng console.và vấn đề với BufferedWriter của tôi là gì? – reukEN11

+0

@ reukEN11: Không có vấn đề với 'BufferedWriter' của bạn. Tôi chỉ muốn viết một ví dụ ngắn gọn. Nếu bạn đọc các tập tin, bạn cần sử dụng đúng mã hóa ở đó. – dacwe

+0

@dacwei see.so tôi đã thay đổi mybufferedwriter để cụ thể bao gồm các char set.repackaged và chạy, nhưng prob vẫn tồn tại. Hãy tiếp tục cố gắng. – reukEN11