Lấy cảm hứng từ câu hỏi này , tôi có thể sử dụng iconv
lệnh để tạo đầu ra UTF-16 với BOM và với độ bền được chỉ định không?
Các iconv
lệnh chuyển đổi văn bản từ một mã hóa khác.
Ví dụ:
echo hello | iconv -f ascii -t utf-16
tạo ra một đại diện UTF-16 của "hello\n"
.
Các tệp UTF-16 thường xuyên, nhưng không phải lúc nào cũng bắt đầu bằng Dấu thứ tự Byte (BOM), đây là mã hóa 2 byte của ký tự Unicode U+FEFF
. Bạn có thể xác định độ bền của tệp UTF-16 bằng BOM bằng cách kiểm tra xem hai byte đầu tiên là FE FF
hay FF FE
.
Các iconv
lệnh có một số tùy chọn để tạo ra UTF-16 đầu ra:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Lệnh này:
echo hello | iconv -f ascii -t utf-16be
tạo UTF-16 lớn không có BOM ; có vẻ như giả định rằng nếu bạn đã chỉ định tuổi thọ, bạn không cần chỉ ra nó trong đầu ra. Tương tự, utf-16le
tạo UTF-16 nhỏ cuối cùng không có BOM.
Điều này:
echo hello | iconv -f ascii -t utf-16
tạo ra (trên hệ thống Ubuntu x86 của tôi) UTF-16 nhỏ cuối cùng bằng BOM - nhưng tôi đã thấy một báo cáo về một lệnh tương tự tạo UTF-16 lớn cuối cùng với BOM, ngay cả trên một hệ thống cuối nhỏ.
Tôi luôn có thể sử dụng utf-16be
hoặc utf-16le
đăng ký BOM theo cách thủ công, nhưng tôi đang tìm giải pháp chỉ sử dụng iconv
lệnh.
Một cách giải quyết khác, nếu bạn biết những gì endianness -t utf-16
tạo ra, là:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Những gì tôi muốn thích để sử dụng là một cái gì đó như:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
nhưng iconv
không hỗ trợ điều đó.
BIÊN TẬP :
Ai đó có quyền truy cập vào hệ thống Mac OSX x86 có thể đăng nhận xét hiển thị đầu ra (sao chép và dán) của lệnh sau không?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
- và tự hỏi tại sao -t utf-16
dường như để lại sự tồn tại không được xác định.
iconv -f UTF-8 -t UTF-16
, chạy trên một hệ thống nhỏ (MacOS), tạo UTF-16 lớn cuối cùng với BOM, có vẻ rất kỳ quặc.