javascript — Написание файла CSV: отображение символов Â

Используя PhoneGap, я создаю приложение, которое может экспортировать CSV-файл. Я делаю это с помощью средства записи файлов (http://docs.phonegap.com/en/3.3.0/cordova_file_file.md.html#FileWriter).

Проблема в том, когда я открываю экспортированный файл .csv, используя OpenOffice.org это показывает эти символы: перед символом градуса (°).
Вот подробности:

HTML

<select>
<option value="&#176;C"> &#176;C </option>
<select>

Значение сохраняется в базе данных:

ID | temperature | temperature_unit
--- ------------- -----------------
1  |   36        |       °C

PHP

while($row = $STH->fetch())
$row['temperature_unit'] = html_entity_decode($row['temperature_unit']);
$row_set[] = $row;
}

echo json_encode($row_set);

Javascript (сокращенный)

//data = json_encoded $row_set
var datatoexport = JSON.parse(data)

var content = "Temperature \n";

for(var x in datatoexport) {
content += datatoexport[x].temperature + " " + datatoexport[x].temperature_unit;
}

//write content to file
writer.write(content);
writer.onwriteend = function(evt) {
alert("File exported");
};

Результат (CSV-файл, открытый в приложении openoffice.org)

Temperature
-----------
36 �Â�°C

РЕДАКТИРОВАТЬ: AJAX и PHP-код для сохранения данных в базу данных (сокращено)

Аякса

assetinfo = {temp:"35",temp_unit:"°C"}

$.post(serverURL + 'API/save.php',
{
temperature: assetinfo.temp,
temp_unit: assetinfo.temp_unit
},
function(data) {
alert("saved");
}
});

PHP

$temp = $_REQUEST['temperature'];
$temp_unit = $_REQUEST['temp_unit'];

$STH = $DBH->prepare("INSERT INTO bearing_table (temperature, temperature_unit) VALUES (:temp, :temp_unit)");
$STH->bindParam(':temp', $temp);
$STH->bindParam(':temp_unit', $temp_unit);
$STH->execute();

0

Решение

Это проблема кодирования, где вы написали UTF-8 (°) как LATIN1. В вашей базе данных уже есть неверное значение.

Установите параметры сортировки столбцов таблицы на utf8_general_ci и не забудьте обновить базу данных с правильным значением «° C».

UPD

  • HTML должен использовать кодировку UTF-8:

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  • В запросе ajax может быть contentType: "charset=utf-8", явно указано.
  • Попробуйте распечатать $_REQUEST['temp_unit'] значение, чтобы увидеть, если значение повреждено перед сохранением в базе данных.

UPD2

0

Другие решения

Других решений пока нет …