2013-09-05 38 views
5

`ve có data.csv tập tin, mà phải được tải lên máy chủ, phân tích ....làm thế nào để phát hiện mã hóa các tập tin csv tải lên

Tập tin này có thể có mã hóa khác nhau. Tôi phải phát hiện và chuyển đổi thành utf8.

Tại thời điểm này php chức năng mb_detect_encoding luôn trả về utf8. i tryed:

<?php 
mb_detect_encoding(file_get_contents($_FILES["csv_uploadfile"]["tmp_name"])); 

hoặc

<?php 
mb_detect_encoding(file_get_contents($saved_file_path)); 

mb_detect_encoding lợi nhuận utf8.

nếu tôi sử dụng lệnh bash

$ file -bi csv_import_1378376486.csv |awk -F "=" '{print $2}' 

nó rerurns iso-8859-1

nên khi tôi cố gắng

iconv --from-code=iso-8859-1 --to-code=utf-8 csv_import_1378382527.csv 

nó không phải là có thể đọc được.

Mã hóa thực là cp1251, bởi tôi không thể phát hiện ra nó. Có ai giúp tôi giải quyết vấn đề này không?

+4

Đây là vấn đề cố hữu của mã hóa văn bản. Bạn không thể luôn luôn phát hiện chúng một cách chính xác, bạn chỉ có thể đoán chúng hầu hết thời gian. Trừ khi có sẵn một số thông tin meta. – scai

Trả lời

4

Là một nhận thấy trong các tài liệu PHP here:

Nếu bạn cố gắng sử dụng mb_detect_encoding() để phát hiện xem một chuỗi là hợp lệ UTF-8, sử dụng chế độ nghiêm ngặt, nó là khá vô giá trị khác.

Vì vậy, bạn nên cố gắng sử dụng true param khi phát hiện mã hóa:

mb_detect_encoding($str, mb_detect_order(), TRUE); 

Nếu bạn có thể dự đoán một số mã hóa có thể, bạn có thể liệt kê chúng thay vì sử dụng mb_detect_order().

+0

bạn đã cứu mạng tôi – elboletaire

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