这是我在SO发的第一篇帖子,请客气点。
我正在开发一个网络应用程序,利用新的HTML5 target.result功能可以在无需上传任何内容到服务器的情况下读取文本文件的内容。
我的问题在于字符集。通常,网页内容是通过页面本身生成的博客文章、评论或其他内容来遵循该页面和数据库配置的字符集规范。然而,这种新的HTML5功能允许我们获取文本文件内容,而不知道所查询文档的原始字符集或格式。
编码数据后通过ajax发送数据是有意义的,因此我尝试了许多不同的方法将文本转换为UTF-8,并通过各种数据类型。我已经走过了整个chartset之路,htaccess、meta、content-type。
毫不奇怪,这么多人都发现使用不同的字符集、ASCII、不同语言和ajax数据类型进行URI编码和解码如此痛苦。
我认为社区可以从一种解决方案中受益,这种解决方案可以获取任何类型的文本文档的文本内容,而不考虑该文档的字符集或格式,以任何语言显示它的原始形式,并添加utf-8作为附加优势。没有谁看不懂的怪异符号,最终终结那些菱形问号。
这里是我目前的进展示例。
复制这篇新闻文章:新闻文章
...在这里粘贴:瑞士转换工具
无论使用什么配置,我都无法使底部输出中的撇号正确显示,真是似曾相识?
那么谷歌是如何解决Google翻译的问题的呢?
编辑:还值得注意的是ABC新闻和瑞士工具转换器的字符集是UTF-8。您可以清楚地看到从UTF-8转换为UTF-8也会产生奇怪的符号,即使它们完全相同。
编辑2:好吧,我成功地搞了一个快速原型并将其上传到远程服务器。您可以在babblingo上访问它。
这是通过ajax发布文本的JavaScript代码:
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
var insertText = e.target.result;
var fields = 'text=' + insertText;
$.ajax({
type: "POST",
url: "ajax.php?action=addfile",
data: fields,
dataType: "json",
complete: function (data) {
if (data.responseJSON.message) {
$( "#modal-message h4" ).replaceWith( "<h4 class='modal-title text-center'>"+data.responseJSON.message+"</h4>" );
}
if (data.responseJSON.report) {
$( "#report_box" ).replaceWith( '<div id="report_box">'+data.responseJSON.report+'</div>' );
}
if (data.responseJSON.import) {
$('#output_box').replaceWith('<div id="output_box" class="hidden-print">'+data.responseJSON.import+'</div>');
}
$('#modal-message').modal('show');
setTimeout(function() {$('#modal-message').modal('hide');}, 3000);
}
});
};
})(f);
reader.readAsText(f);
}
}