К тому времени, когда вы имеете дело со строкой в JavaScript, вы имеете дело с UTF-16. Браузер должен убедиться, что любые данные, которые он передает в слой JavaScript, были правильно преобразованы.
В этом случае, поскольку вы используете $.get
, это означает, что слой ajax должен знать, с чем он имеет дело. Вам нужно будет убедиться, что ваш сервер возвращает правильную информацию о кодировке в ответе HTTP, содержащем файл CSV, чтобы браузер знал, в каком формате находятся символьные данные. Как только вы это сделаете, браузер должен выполнить любое необходимое преобразование от оригинала до UTF-16 для JavaScript.
В частности, если ваш CSV-файл находится в наборе символов Windows-1252 (иногда люди называют это «ANSI», хотя это неверно), это будет заголовок Content-Type
, с которым сервер должен возвращать файл:
Content-Type: text/csv; charset=windows-1252
... но если ваш контент японский, я бы не подумал, что он будет в Windows-1252, который (очень ограничен) латинским набором символов. Если вы используете Windows, скорее всего это будет кодовая страница 932 , которая будет:
Content-Type: text/csv; charset=Windows-31J
... или если вы используете * nix, возможно EUC-JP :
Content-Type: text/csv; charset=EUC-JP
Подробнее о кодировках вы можете узнать в этом документе W3C . ( Эта статья Джоэля Спольски также весьма полезна.) Дополнительную информацию о строках JavaScript можно найти в спецификации (но в основном каждый "символ" в строке JavaScript является UTF -16 слово, которое означает, что символы, требующие двух слов, отображаются в виде двух «символов» в строке - не идеально для некоторых текстов, особенно для восточноазиатских, но когда оно определялось, ОЗУ по-прежнему ценно ...)