Làm cách nào tôi có thể chuyển đổi nhiều tệp sang mã hóa UTF-8 bằng cách sử dụng các công cụ dòng lệnh * nix? [bản sao]


46

Có thể trùng lặp:
Các tệp chuyển đổi hàng loạt để mã hóa hoặc kết thúc dòng

Tôi có một loạt các tệp văn bản mà tôi muốn chuyển đổi từ bất kỳ bảng mã cụ thể nào sang mã hóa UTF-8.

Có bất kỳ công cụ dòng lệnh hoặc Perl (hoặc ngôn ngữ nào bạn chọn) một lớp lót tôi có thể sử dụng để thực hiện công việc này không?

Câu trả lời:


56

iconv không chuyển đổi giữa nhiều bảng mã ký tự. Vì vậy, thêm một chút phép thuật bash và chúng ta có thể viết

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done

Điều này sẽ chạy iconv -f ascii -t utf-8đến mọi tệp kết thúc bằng .txt, gửi tệp được mã hóa lại thành một tệp có cùng tên nhưng kết thúc bằng .utf8.txtthay vì .txt.

Không phải là điều này thực sự sẽ làm bất cứ điều gì với các tệp của bạn (vì ASCII là tập con của UTF-8), nhưng để trả lời câu hỏi của bạn về cách chuyển đổi giữa các bảng mã.


2
Bạn nên trích dẫn var $ i, để xử lý tên tệp có dấu cách.
Richard Hoskins

Nó sẽ làm mọi thứ, nó sẽ thêm BOM cho một ...
jason

Bạn có chắc chắn iconv sẽ thêm BOM không? Tôi đã có ấn tượng rằng nó sẽ không với UTF-8.
Richard Hoskins

5
Tôi vừa thử nghiệm điều này với iconv (GNU libiconv 1.11) và nó không thêm BOM. Theo hiểu biết của tôi, iconv sẽ chỉ thêm BOM nếu có trong BST, điều này sẽ không có trong ASCII. BOM có vấn đề và không cần thiết với UTF-8.
Richard Hoskins

2
nếu phiên bản iconv của bạn không hỗ trợ tham số -o, bạn có thể trực tiếp thay thế nó bằng >> để sử dụng chuyển hướng shell.
cướp
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.