我正在创建一个文件,并在其上写入一个字符串,其编码设置为LATIN1。但是,完成的文件设置了不同的编码(在Linux上,“file -bi”返回的us-ascii或utf-8,取决于我用来获取String的方法)。
以下是创建方法:
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引起了问题)。
最佳答案
问题所描述的方法没有问题。实际上,问题出在未正确设置的http请求正文处理程序中。
因此,我在回答自己的问题,以帮助其他遇到相同问题的人。
以下是我的请求处理程序(来自http_server包):
HttpBodyHandler.processRequest(request/*, defaultEncoding: Encoding.getByName("ISO-8859-1")*/).then((body) {
// Do something with body.
}, onError: _printError);
看看注释掉的“defaultEncoding”。这就是原因。如果您不处理请求中的任何文件( Blob ),我认为您无法设置它。我不知道在处理某些String时是否应该设置它(,如果有人可以使用此信息完成此答案,我将不胜感激)。
关于file - Dart语言:编码(与HttpRequest和http_server包有关),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27133682/