Java-апплет - Невозможно изменить кодировку платформы по умолчанию на другую
Я сталкиваюсь с проблемой кодирования (я думаю), когда я пытаюсь загрузить файл с именем файла, имеющим шведские символы. Апплет работает нормально, когда я загружаю файл в Windows, но не в Mac OS.
Имя файла портится при печати его на стороне сервера, которая является сервером Domino, и показывает поля на Mac, но когда я устанавливаю кодировку в UTF-8 new String(filename.getBytes("utf-8"))
это показывает ?
на обоих Win и Mac.
ОБНОВЛЕНО:
Ниже приведены фрагменты кода:
Настройка параметров запроса и размещение
...
request.setParameter("Name", tmpAtt.getFileName());
...
HttpURLConnection connection ...
connection.setRequestProperty("Content-Type", "multipart/form-data; charset=UTF-8; boundary=" + boundary);
if (os == null) os = connection.getOutputStream();
Установка параметров для имени файла и Inputstream
request.setParameter(fileUploadFieldName, tmpAtt.getFilePath(), fi);
public void setParameter(String name, String filename, InputStream is) throws IOException {
boundary();
writeName(name);
write("; charset=utf-8; filename=\"");
write(filename);
write('"');
newline();
write("Content-Type:");
String type = connection.guessContentTypeFromName(filename);
if (type == null) type = "application/octet-stream";
writeln(type);
newline();
pipe(is, os);
newline();
}
По окончании размещения на сервере
public InputStream post() throws IOException {
boundary();
writeln("--");
printOS(os);
os.close();
InputStream iis = connection.getInputStream();
printIS(iis);
return iis;
}
Получение этого вывода при записи байтов в OutputStream для отправки запроса. И имя выглядит хорошо для меня.
------------------------------hxre3intl6yy-17eufpccwtxc89pbvyg0iwe3i
Content-Disposition: form-data; name="Name
Räpörå.log
------------------------------hxre3intl6yy-17eufpccwtxc89pbvyg0iwe3i
Content-Disposition: form-data; name="Name2
------------------------------hxre3intl6yy-17eufpccwtxc89pbvyg0iwe3i
Content-Disposition: form-data; name="APPROVALSTATUS
В чем может быть проблема.
благодарю вас.
2 ответа
Строки Java всегда внутренне кодируются как UTF-16, но это не имеет отношения к вашей проблеме, и попытка "установить кодировку" строки по своей сути неверна.
Кодировки используются для перевода строк и байтов. Ваша проблема в том, что в какой-то момент, когда это делается, вы не указываете кодировку, поэтому Java использует кодировку платформы по умолчанию.
Поскольку API файловой системы основан на строках, проблема не может быть на этом конце, поэтому filename
Строка, вероятно, повреждена в точке, где вы извлекаете ее у пользователя - или потому, что есть другой случай, когда неправильно и бессмысленно пытаются "установить кодировку" строки Java.
Настройки кодировки в eclipse актуальны только для вашего исходного кода или других файлов, которые являются частью вашего проекта.
Я просто изменил схему кодирования на ISO-8859-1
,
Вышеупомянутый write("Content-Type:");
Метод был примерно таким:
1. write(String s){
2. os.write(s.getBytes());
3. }
И я просто изменил 2-ю строку на os.write(s.getBytes("ISO-8859-1"))
Не работал с UTF-8
Не знаю почему???
схема менялась где-то на MacRoman
потому что, когда я добавил схему ISO-8859-1 в эту (как упоминалось выше) строку request.setParameter("Name", new String(tmpAtt.getFileName().getBytes("ISO-8859-1")));
, Name
был искажен в конце.
Но я не мог понять, почему UTF-8 не работал и почему схема менялась где-то посередине???
благодарю вас