it-swarm-vi.tech

Cách tốt nhất để chuyển đổi tập tin văn bản giữa các bộ ký tự?

Công cụ hoặc phương pháp nhanh nhất, dễ nhất để chuyển đổi tệp văn bản giữa các bộ ký tự là gì?

Cụ thể, tôi cần chuyển đổi từ UTF-8 sang ISO-8859-15 và ngược lại.

Mọi thứ diễn ra: một lớp trong ngôn ngữ kịch bản yêu thích của bạn, công cụ dòng lệnh hoặc các tiện ích khác cho HĐH, trang web, v.v.

Giải pháp tốt nhất cho đến nay:

Trên Linux/UNIX/OS X/cygwin:

  • Gnu iconv được đề xuất bởi Troels Arvin được sử dụng tốt nhất làm bộ lọc. Nó dường như là phổ biến có sẵn. Thí dụ:

    $ iconv -f UTF-8 -t ISO-8859-15 in.txt > out.txt
    

    Như được chỉ ra bởi Ben , có một trình chuyển đổi trực tuyến sử dụng iconv .

  • Gnu recode ( thủ công ) được đề xuất bởi Cheekysoft sẽ chuyển đổi một hoặc một vài tệp tại chỗ. Thí dụ:

    $ recode UTF8..ISO-8859-15 in.txt
    

    Cái này sử dụng các bí danh ngắn hơn:

    $ recode utf8..l9 in.txt
    

    Recode cũng hỗ trợ bề mặt có thể được sử dụng để chuyển đổi giữa các loại kết thúc dòng và mã hóa khác nhau:

    Chuyển đổi dòng mới từ LF (Unix) sang CR-LF (DOS):

    $ recode ../CR-LF in.txt
    

    Tệp mã hóa Base64:

    $ recode ../Base64 in.txt
    

    Bạn cũng có thể kết hợp chúng.

    Chuyển đổi tệp UTF8 được mã hóa Base64 với các kết thúc dòng Unix sang tệp Latin 1 được mã hóa Base64 với các kết thúc dòng Dos:

    $ recode utf8/Base64..l1/CR-LF/Base64 file.txt
    

Trên Windows có Powershell ( Jay Bazuzi ): 

  • PS C:\> gc -en utf8 in.txt | Out-File -en ascii out.txt

    (Mặc dù không hỗ trợ ISO-8859-15; nó nói rằng các bộ ký tự được hỗ trợ là unicode, utf7, utf8, utf32, ascii, bigendianunicode, default và OEM.)

Chỉnh sửa

Bạn có nghĩa là hỗ trợ iso-8859-1? Sử dụng "Chuỗi" thực hiện điều này, ví dụ: ngược lại

gc -en string in.txt | Out-File -en utf8 out.txt

Lưu ý: Các giá trị liệt kê có thể là "Unknown, String, Unicode, Byte, BigEndianUnicode, UTF8, UTF7, Ascii".

486
Antti Kissaniemi

Tiện ích độc lập cách tiếp cận

iconv -f ISO-8859-1 -t UTF-8 in.txt > out.txt
-f ENCODING  the encoding of the input
-t ENCODING  the encoding of the output

Bạn không cần phải xác định một trong hai đối số này. Chúng sẽ mặc định cho miền địa phương hiện tại của bạn, thường là UTF-8.

214
Troels Arvin

Hãy thử VIM

Nếu bạn có vim, bạn có thể sử dụng:

Không được kiểm tra cho mọi mã hóa.

Điều thú vị về điều này là bạn không cần phải biết mã hóa nguồn

vim +"set nobomb | set fenc=utf8 | x" filename.txt

Lưu ý rằng lệnh này sửa đổi trực tiếp tệp


Phần giải thích!

  1. +: Được vim sử dụng để nhập lệnh trực tiếp khi mở tệp. Thông thường được sử dụng để mở tệp tại một dòng cụ thể: vim +14 file.txt
  2. |: Dấu phân cách của nhiều lệnh (như ; trong bash)
  3. set nobomb: không có utf-8 BOM
  4. set fenc=utf8: Đặt mã hóa mới thành liên kết utf-8 doc
  5. x: Lưu và đóng tệp
  6. filename.txt: đường dẫn đến tệp
  7. ": qotes ở đây vì đường ống. (nếu không bash sẽ sử dụng chúng như bash pipe)
79
Boop

Trong Linux, bạn có thể sử dụng lệnh recode rất mạnh mẽ để thử và chuyển đổi giữa các bộ ký tự khác nhau cũng như mọi vấn đề kết thúc dòng. recode -l sẽ hiển thị cho bạn tất cả các định dạng và mã hóa mà công cụ có thể chuyển đổi giữa. Nó có khả năng là một danh sách dài RẤT.

35
Cheekysoft

iconv (1)

iconv -f FROM-ENCODING -t TO-ENCODING file.txt

Ngoài ra còn có các công cụ dựa trên iconv trong nhiều ngôn ngữ.

19
Daniel Papasian
Get-Content -Encoding UTF8 FILE-UTF8.TXT | Out-File -Encoding UTF7 FILE-UTF7.TXT

Phiên bản ngắn nhất, nếu bạn có thể cho rằng BOM đầu vào là chính xác:

gc FILE.TXT | Out-File -en utf7 file-utf7.txt
19
Jay Bazuzi

Hãy thử chức năng iconv Bash

Tôi đã đặt cái này vào .bashrc:

utf8()
{
    iconv -f ISO-8859-1 -t UTF-8 $1 > $1.tmp
    rm $1
    mv $1.tmp $1
}

.. để có thể chuyển đổi các tập tin như vậy:

utf8 MyClass.Java
14
Arne Evertsson

Dùng thử Notepad ++

Trên Windows, tôi có thể sử dụng Notepad ++ để thực hiện chuyển đổi từ ISO-8859-1 sang UTF-8 . Nhấp vào "Encoding" và sau đó "Convert to UTF-8".

13
Jeremy Glover

Oneliner sử dụng find, với tính năng tự động phát hiện

Mã hóa ký tự của tất cả các tệp văn bản phù hợp được tự động phát hiện và tất cả các tệp văn bản phù hợp được chuyển đổi thành mã hóa utf-8:

$ find . -type f -iname *.txt -exec sh -c 'iconv -f $(file -bi "$1" |sed -e "s/.*[ ]charset=//") -t utf-8 -o converted "$1" && mv converted "$1"' -- {} \;

Để thực hiện các bước này, Shell phụ sh được sử dụng với -exec, chạy một lớp lót với cờ -c và chuyển tên tệp làm đối số vị trí "$1" với -- {}. Ở giữa, tệp đầu ra utf-8 tạm thời được đặt tên converted.

Trong đó file -bi có nghĩa là:

  • -b, -
    Không đặt tên tập tin vào dòng đầu ra (chế độ ngắn).

  • -i, -
    Làm cho lệnh tập tin xuất ra các chuỗi loại mime thay vì các chuỗi truyền thống dễ đọc hơn của con người. Do đó, nó có thể nói ‘văn bản/đồng bằng; charset = us-ascii, chứ không phải là văn bản ASCII.

Lệnh find rất hữu ích cho việc tự động hóa quản lý tệp như vậy.

Bấm vào đây để thêm find galore .

9
Serge Stroobandt

Biểu tượng PHP ()

iconv("UTF-8", "ISO-8859-15", $input);

3
user15096

DOS/Windows: sử dụng Trang mã

chcp 65001>NUL
type ascii.txt > unicode.txt

Lệnh chcp có thể được sử dụng để thay đổi trang mã. Mã trang 65001 là tên Microsoft cho UTF-8. Sau khi thiết lập trang mã, đầu ra được tạo bởi các lệnh sau sẽ là của trang mã được đặt.

2
lalthomas

để ghi tệp thuộc tính (Java) thông thường tôi sử dụng tệp này trong linux (bản phân phối mint và ubfox):

$ native2ascii filename.properties

Ví dụ:

$ cat test.properties 
first=Execução número um
second=Execução número dois

$ native2ascii test.properties 
first=Execu\u00e7\u00e3o n\u00famero um
second=Execu\u00e7\u00e3o n\u00famero dois

PS: Tôi đã viết Thực thi số một/hai trong các danh mục để buộc các nhân vật đặc biệt.

Trong trường hợp của tôi, trong lần thực hiện đầu tiên tôi đã nhận được thông báo này:

$ native2ascii teste.txt 
The program 'native2ascii' can be found in the following packages:
 * gcj-5-jdk
 * openjdk-8-jdk-headless
 * gcj-4.8-jdk
 * gcj-4.9-jdk
Try: Sudo apt install <selected package>

Khi tôi cài đặt tùy chọn đầu tiên (gcj-5-jdk), sự cố đã kết thúc.

Tôi hy vọng điều này sẽ giúp ai đó.

1
Maciel Bombonato

Công cụ yêu thích của tôi cho việc này là Jedit (trình soạn thảo văn bản dựa trên Java) có hai tính năng rất tiện lợi:

  • Một cho phép người dùng tải lại một văn bản với một mã hóa khác (và, như vậy, để kiểm soát trực quan kết quả)
  • Một số khác cho phép người dùng chọn rõ ràng mã hóa (và cuối dòng char) trước khi lưu
0
yota

Sử dụng tập lệnh Python này: https://github.com/goerz/convert_encoding.py Hoạt động trên mọi nền tảng. Yêu cầu Python 2.7.

0
kinORnirvana

Với Ruby:

Ruby -e "File.write('output.txt', File.read('input.txt').encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: ''))"

Nguồn: https://robots. Dùtbot.com/fight-back-utf-8-invalid-byte- Hậu quả

0
Dorian

Chỉ cần thay đổi mã hóa tệp được tải trong IntelliJ IDEA IDE, ở bên phải thanh trạng thái (phía dưới), trong đó bộ ký tự hiện tại được chỉ định. Nó nhắc để Tải lại hoặc Chuyển đổi, sử dụng Chuyển đổi. Hãy chắc chắn rằng bạn đã sao lưu tập tin gốc trước.

0
Nikolai Varankine