2011-01-28 38 views
5

Vấn đề của tôi được giải thích rõ nhất trong ví dụ: Chương trình sau đây chạy trên hệ thống Linux là không ở chế độ Unicode nhưng trong ISO-8859-15. Môi trường được thiết lập như sau: [email protected]Java: Runtime.getRuntime(). Exec() chuyển đối số trong unicode khi nó không nên

import java.io.*; 
import java.util.*; 

public class UnicodeTest { 
    public static void main(String[] args) throws Exception { 
      Runtime.getRuntime().exec(new String[] { "foobar", "äöü" }); 
    } 
} 

Khi tôi biên dịch chương trình này trong dòng lệnh sử dụng javac và chạy nó, foobar được lập luận äöü một cách chính xác, trong ISO-8859-1. Chương trình tương tự, chạy từ Netbeans, chuyển đối số dưới dạng Unicode, do đó làm cho nó không sử dụng được trong chương trình được gọi. Điều tương tự cũng xảy ra trong Tomcat khi phương thức đó được gọi. Biến môi trường hoặc cài đặt nào sử dụng Java để xác định cách chuyển đối số trong Runtime.exec()?

+0

"khi không nên" - không phải là thừa. Bạn có bao giờ muốn nó vượt qua chúng không chính xác. ;) Bạn đã kiểm tra cách netbeans lưu tệp của bạn? Netbeans sử dụng javac để thực hiện việc biên dịch, vì vậy nó sẽ biên dịch giống nhau. –

+0

Peter: Cảm ơn, đã chỉnh sửa tiêu đề. Tôi sẽ kiểm tra xem Netbeans có tạo các tệp lớp giống nhau không, tôi đoán là vậy. –

+0

Đã kiểm tra điều đó. Chạy từ Netbeans tạo ra kết quả sai. Chạy cùng một tệp lớp (được xây dựng bởi Netbeans) trong dòng lệnh tạo ra kết quả đúng. –

Trả lời

1

Tìm thấy. Hành vi này được kiểm soát bởi thuộc tính hệ thống file.encoding. Netbeans đặt nó thành UTF-8. Trong dòng lệnh, nó là ISO-8859-15.

Các vấn đề liên quan