Sử dụng chức năng PHP 5.3 fgetcsv
, tôi gặp một số sự cố do mã hóa các vấn đề. Lưu ý rằng tệp đó có các ký tự latin "đặc biệt" như tiếng Tây Ban Nha, é, í ï, v.v ...php fgetcsv - vấn đề mã hóa charset
Tôi nhận tệp CSV xuất một số dữ liệu có cấu trúc mà tôi có trong tệp MS 2008 dành cho Mac Excel.
Nếu tôi mở ứng dụng bằng ứng dụng Mac OS X TextEdit
, mọi thứ có vẻ hoàn hảo.
Nhưng khi tôi xuống chương trình PHP của mình và cố gắng đọc CSV bằng cách sử dụng hàm fgetcsv PHP đó, tôi không nhận được nó để đọc đúng bộ ký tự.
/**
* @Route("/cvsLoad", name="_csv_load")
* @Template()
*/
public function cvsLoadAction(){
//setlocale(LC_ALL, 'es_ES.UTF-8');
$reader = new Reader($this->get('kernel')->getRootDir().'/../web/uploads/documents/question_images/2/41/masiva.csv');
$i = 1;
$r = array("hhh" => $reader -> getAll());
return new Response(json_encode($r, 200));
}
Như bạn có thể thấy, tôi cũng đã thử sử dụng setlocale
đến es_ES.UTF-8
. Nhưng không có gì làm cho nó hoạt động.
Phần đọc đến đây:
public function getRow()
{
if (($row = fgetcsv($this->_handle, 10000, $this->_delimiter)) !== false) {
$this->_line++;
return $this->_headers ? array_combine($this->_headers, $row) : $row;
} else {
return false;
}
}
Xem những gì tôi nhận được trong biến $ row sau mỗi lần đọc hàng:
Những ?
nhân vật được coi là nguyên âm với đồ họa nhấn mạnh vào chúng.
Bất kỳ đầu mối nào ở đó? Nó sẽ hoạt động nếu tôi sử dụng MS Excel cho Windows? Làm thế nào tôi có thể biết trong thời gian chạy mã hóa chính xác của tập tin và thiết lập nó trước khi đọc nó?
(Đối với những người nói tiếng Tây Ban Nha này, đừng sợ hãi với những thứ y tế khủng khiếp như vậy trong những văn bản đó;)).
Cùng một vấn đề. Tệp CSV được mã hóa UTF8 nhập tiền phạt trên một máy chủ nhưng không nhập một máy chủ khác. Đã kết thúc viết trình đọc CSV của riêng tôi. –
FWIW, bạn không thể thực sự * biết * mã hóa của một tệp mà không được thông báo. Bạn có thể đoán khi bạn đọc nó, và chuyển đổi cho phù hợp, nhưng không có gì là đáng tin cậy như được nói với mã hóa. – cmbuckley
Cảm ơn cbuckley. Bạn có ý nghĩa gì với loại "chuyển đổi tương ứng" để thử đoán và hỏi người dùng xem liệu anh ấy có chấp thuận việc nhập không? Và nếu không, tiếp tục cố gắng mã hóa khác cho nguồn gốc? – ElPiter