2014-11-26 11 views
6

tôi cố gắng phân tích một trang "iso-8859-1" và lưu vào DB của tôi với utf-8, đây là mã của tôi:Chuyển đổi iso-8859-1 sang UTF-8 javascript

var buffer = iconv.encode(data, "iso-8859-1"); 
data = iconv.decode(buffer, 'utf8'); 

Nó không hoạt động. Tất cả các ký hiệu như å hoặc ä chuyển thành �

Làm cách nào để lưu các ký hiệu này?

+1

Bạn có chắc là chúng chưa được mã hóa hay không và bạn đã mã hóa kép chúng chưa? –

+0

nếu bạn mã hóa để mã hóa X, sau đó bạn cần phải giải mã từ X. Bạn không thể chỉ làm 'iconv.decode (icon.encode (dữ liệu," x ")," Y ")'. Nếu bạn muốn mã hóa thành một định dạng phổ quát, mã hóa thành unicode và từ điểm đó trong codebase của bạn, không bao giờ chuyển đổi lần nữa: DB có thể lưu trữ unicode, định dạng dữ liệu có thể đại diện unicode, và dữ liệu độc giả có thể tự động phát hiện unicode. –

+1

Bạn dường như đã chuyển 'encode' và' decode'. – hon2a

Trả lời

15

Bạn cần thư viện của bên thứ ba cho tác vụ đó. Bạn đang sử dụng iconv-lite vì vậy bạn cần phải làm theo các bước sau:

  1. tập tin đầu vào Open in nhị phân chế độ, vì vậy JavaScript không giả định UTF-8 cũng không cố gắng chuyển đổi sang mã hóa nội bộ của mình:

    var fs = require("fs"); 
    var input = fs.readFileSync(inputFilePath, {encoding: "binary"}); 
    
  2. Chuyển đổi từ ISO-8859-1 để Buffer:

    var iconv = require('iconv-lite'); 
    var output = iconv.decode(input, "ISO-8859-1"); 
    
  3. Lưu Buffer đến tập tin đầu ra:

    fs.writeFileSync(outputFilePath, output); 
    

Nếu không chắc chắn về tên mã hóa, bạn có thể kiểm tra xem một mã hóa cụ thể được hỗ trợ với encodingExists():

> iconv.encodingExists("ISO-8859-1"); 
true 
+0

Nó không hoạt động. Trường hợp này là tôi muốn sửa các vấn đề phụ đề của mình khi chúng được mã hóa theo ISO-8859-1 và chuyển đổi chúng thành UTF-8. Tôi làm điều bằng tay bằng cách thay đổi Unicode của phụ đề thông qua Firefox 'view -> Text Encoding' và thay đổi nó thành' Arabic Windows' và thay thế văn bản cố định vào tập tin phụ đề và lưu nó thành 'UTF-8'. Tự động hóa thủ tục bằng Node JS và giải pháp DID của bạn không hoạt động cho tôi, –

+0

@FarzadYZ Đó là trường hợp sử dụng rất cụ thể và khó hiểu (tiếng Ả Rập? Trong tiếng Latin-1?) Và tôi không biết bạn viết mã gì hoặc dữ liệu của bạn như thế nào Là. Đoạn mã này chỉ làm cho chuyển đổi được hỏi trong câu hỏi dưới giả định rằng dữ liệu đầu vào được mã hóa chính xác. (Mặc dù bây giờ tôi quay trở lại đây hai năm sau đó tôi nhận ra tôi đang đọc từ một tập tin trong khi OP nói "trang" mà không có bối cảnh thêm.) –

0

Đó là làm việc cho tôi:

var tempBuffer = new Buffer(response.body, 'iso-8859-1'); 
var iconv = new Iconv('ISO-8859-1', 'UTF-8'); 
var tempBuffer = iconv.convert(tempBuffer); 

đã sử dụng mô-đun 'iconv' https://github.com/bnoordhuis/node-iconv

Các vấn đề liên quan