[英]HTML5 and the mystery charset
這是我在SO的第一篇文章,所以要溫柔。
我目前正在開發一個利用新的HTML5 target.result的Web應用程序。 這允許我閱讀文本文件的內容,而無需上傳任何東西到服務器。
我遇到的問題是關於charset。 因此,通常通過頁面本身生成Web內容作為博客文章,評論或符合該頁面的charset和數據庫配置的任何內容。 但是,這個新的HTML5功能允許我們在不知道相關文檔的原始字符集或格式的情況下獲取文本文件內容。
在數據被ajax發布之前對數據進行編碼是有意義的,所以我嘗試了許多不同的方法將文本轉換為utf-8以及通過各種dataTypes。 我已經完成了整個chartset之路,htaccess,meta,content-type。
毫不奇怪,很多人發現編碼的整個過程,使用不同的字符集,ASCII,不同的語言和ajax數據類型解碼URI這樣的痛苦。
我認為社區可以從一個解決方案中受益,該解決方案可以從任何類型的文本文檔中獲取文本,無論字符串或格式如何,以任何語言顯示,並通過原始形式的ajax請求響應以及utf-8的額外獎勵顯示它。 沒有人可以閱讀的怪異符號,最終結束那些鑽石問號。
這是我現在所處位置的一個例子。
復制這篇新聞文章: 新聞文章
...並將其粘貼在這里: 瑞士轉換工具
無論我使用什么配置,我都無法在底部輸出中正確顯示撇號,似曾經有人嗎?
谷歌如何用谷歌翻譯解決這個問題?
編輯: 值得注意的是,ABC新聞和瑞士工具轉換器的字符集都是utf-8。 你可以清楚地看到,從utf-8到utf-8的轉換也給出了奇怪的符號,即使它們是完全相同的字符集。
EDIST: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);
}
}
由於沒有人回答過這個問題,我將根據類似的工作找到答案,我已經完成了對不懂utf-8但仍然生成html的遺留應用程序的即時翻譯。
它只涉及創建一個映射表,從有問題的字符代碼到它的html實體等價。 ñ=>&ntilde; 例如。 這是一些示例代碼。
function createEntities(source) {
var map = [
{ key:"á", value: "<b>á</b>"},
{ key:"ñ", value: "<b>ñ</b>"},
{ key:"ó", value: "<b>ó</b>" },
{ key:"'", value: "<b>'</b>" }
];
var target = source;
for ( prop in map ) {
var pair = map[prop];
target = target.replace(pair.key,pair.value)
}
return target;
}
這是一個證明這一點的jsFiddle 。 當然,您需要設置適當的映射。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.