Java-апплет - Невозможно изменить кодировку платформы по умолчанию на другую - PullRequest
3 голосов
/ 07 июня 2011

Я сталкиваюсь с проблемой кодирования (я полагаю), когда я пытаюсь загрузить файл с именем файла, имеющим шведские символы.Апплет работает нормально, когда я загружаю файл в 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 ]

2 голосов
/ 07 июня 2011

Java-строки всегда внутренне кодируются как UTF-16, но это не имеет отношения к вашей проблеме, и попытка «установить кодировку» строки по своей сути неверна.

Кодировки используются для перевод между строками и байтами.Ваша проблема в том, что в какой-то момент, когда это делается, вы не указываете кодировку, поэтому Java использует кодировку платформы по умолчанию.

Поскольку API файловой системы основан на строках, проблема не может быть на этом конце,поэтому filename String, вероятно, поврежден в точке, где вы получаете его от пользователя - или потому что есть другой случай, когда неправильно и бессмысленно пытаются «установить кодировку» строки Java.

Кодировканастройки в eclipse имеют отношение только к вашему исходному коду или другим файлам, которые являются частью вашего проекта.

0 голосов
/ 09 июня 2011

Я только что изменил схему кодирования на 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 и почему схема менялась где-то посередине ???

спасибо

...