Язык Dart: кодировка (относится к пакету HttpRequest и http_server)

Я создаю файл и пишу в нем строку с кодировкой LATIN1. Однако готовый файл устанавливается с другой кодировкой (us-ascii или utf-8, возвращаемой «file -bi» в Linux, в зависимости от метода, который я использую для получения строки).

Далее следует метод создания:

new File("/home/username/dart_test/file.xml").create(recursive: true).then((file) {
    file.writeAsString(_methodReturnsAString(), mode: FileMode.WRITE, encoding: LATIN1);
});

Любые идеи о том, что может быть не так?

ИЗМЕНИТЬ (ОТНОСИТЕЛЬНО ОТВЕТА):

Нет никаких проблем с описанным выше способом. Проблема заключалась в данных, которые предоставлялись методу внутри «writeAsString». Эти данные поступают из запроса HttpRequest, который не обрабатывался должным образом (на самом деле проблема была вызвана установкой кодировки ISO-8859-1).


person Felipe    schedule 25.11.2014    source источник
comment
Каково значение LATIN1?   -  person Günter Zöchbauer    schedule 25.11.2014
comment
@GünterZöchbauer, я думаю, что LATIN1 означает кодировку ISO-8859-1. Я попробовал Encoding.getByName(ISO-8859-1), и это тоже не сработало.   -  person Felipe    schedule 25.11.2014
comment
Я нашел это. LATIN1 из import 'dart:convert';   -  person Günter Zöchbauer    schedule 25.11.2014
comment
@GünterZöchbauer Я нашел проблему. Поскольку я использую http_server для обработки HttpBody, я устанавливал его кодировку с помощью ISO-8859-1. Когда я прокомментировал это (это означает, что HttpBody обрабатывает запросы с помощью UT8), это сработало. Я собираюсь ответить на вопрос с описанием причины. Спасибо!   -  person Felipe    schedule 25.11.2014


Ответы (1)


Нет проблем с методом, описанным в вопросе. На самом деле проблема заключается в обработчике тела http-запроса, который не был установлен должным образом.

Поэтому я отвечаю на свой вопрос, чтобы помочь другим с той же проблемой.

Далее следует мой обработчик запросов (из пакета http_server):

    HttpBodyHandler.processRequest(request/*, defaultEncoding: Encoding.getByName("ISO-8859-1")*/).then((body) {
        // Do something with body.
    }, onError: _printError);

Взгляните на закомментированный «defaultEncoding». Это было причиной. Я не думаю, что вы можете установить его, если вы не обрабатываете какие-либо файлы (блобы) по запросу. Я не знаю, есть ли ситуация, когда вы должны установить его, просто обрабатывая некоторую строку (Я был бы признателен, если бы кто-нибудь мог дополнить этот ответ этой информацией).

person Felipe    schedule 25.11.2014