2015-07-19 3 views
-1

Я пытаюсь помочь моему учителю преобразовать греческий учебник в онлайн-приложение. Часть этого включает в себя получение Shapefile (рисует многоугольники на картах вместе с описаниями полигонов.) И отображает все на этой карте. Я не могу напрямую получить доступ к части файла шейп-файла, у которой есть данные, которые мне нужно преобразовать из-за того, что он находится в шестнадцатеричном формате.
В любом случае, вот код, который я печатаю на своей консоли.
Javascript, конвертирующий текст из греческого языка в UTF-8

console.log((arr[1][i]['PERIOD']); 

«обр» является массив данных, который содержит все свойства, которые я хочу, чтобы преобразовать из греческого языка в UTF-8. Я печатаю только «ПЕРИОД», а не 12 других пробиотиков, связанных с массивом.
Когда я запускаю свою страницу, консоль возвращает несколько вариантов текста (поскольку существует несколько периодов.) Вот пример текста, который он возвращает.

ÎÏÏαÏκή, ÎλαÏική, ÎλληνιÏÏική 
ΡÏμαÏκή 
ÎθÏμανική 
Î¥ÏÏεÏοβÏζανÏινή 

Верьте или нет, но это не греческий текст. Поэтому я и слежения за ними вокруг нашел эту функцию для преобразования в UTF-8:

function encode_utf8(s){ 
return unescape(encodeURI(s)); 
} 

Когда я добавить эту функцию в моей console.log, это то, что я получаю:

áÃÂüñÃÂúî 
ÃÂøÃÂüñýùúî 
ÃÂ¥ÃÂÃÂõÃÂÿòÃÂöñýÃÂùýî 
ÃÂøÃÂüñýùúî 

Я не 100 %, но я думаю, что текст, который я пытаюсь преобразовать, в настоящее время находится в ISO-8859-7.
Любая помощь с этим была бы потрясающей.
Спасибо.

+9

Греческий язык - это язык; UTF-8 является кодировкой (Unicode). Похоже, что вы действительно хотите декодировать ISO 8859-7 (в текст Unicode). – melpomene

+2

Покажите нам, как вы читаете в шейп-файле (или независимо от того, откуда поступают данные). Вот где ваша проблема лежит, и именно здесь вы можете исправить кодировку. – Bergi

+2

Вы должны предоставить нам 1. выписку из «шестнадцатеричного файла», 2. как вы загружаете этот шестнадцатеричный файл в свой _JavaScript_ 3. как вы конвертируете данные, которые вы загрузили в _String_ –

ответ

0

Вы довольно легко можно построить карту байтов одного гольца набора в другой (хотя он может получить утомительно)

Предполагая, что ISO 8859-7, который только 256 байт, так что не слишком сложно,

function genCharMap() { // ISO 8859-7 to Unicode 
    var map = [], i, j, str; 
    map.length = 256; 
    map[0] = 0; // fill in 0 
    str = '\u2018\u2019\u00a3\u20ac\u20af\u00a6\u00a7\u00a8\u00a9\u037a\u00ab\u00ac\u00ad\u00ae\u2015\u00b0\u00b1\u00b2\u00b3\u0384\u0385\u0386\u00b7\u0388\u0389\u038a\u00bb\u038c\u00bd\u038e'; 
    for (i = 0; i < str.length; ++i) // fill in 0xA1 to 0xBE 
     map[0xA1 + i] = str.charCodeAt(i); 
    for (i = 0; i < 256; ++i) // fill in blanks 
     if (i in map) j = map[i] - i; 
     else map[i] = j + i; 
    return map; 
} 

Теперь вы можете применить это преобразование к вашему байт

var byteArr = [0xC1, 0xE2, 0xE3, 0xE4], // Αβγδ 
    str_out = '', 
    i, 
    map = genCharMap(); 

for (i = 0; i < byteArr.length; ++i) { 
    str_out += String.fromCharCode(
     map[byteArr[i]] 
    ); 
} 

str_out; // "Αβγδ" 

Если вы переписывание этот код для кодировки с «сочетание символов» может быть безопаснее поменять ул я использовал в genCharMap для массива чисел вместо.

Смежные вопросы