Không dựa vào regexes: JSON có một số trường hợp góc lạ với \u
các điểm mã thoát và không phải BMP. (cụ thể, JSON sẽ mã hóa một điểm mã bằng cách sử dụng hai\u
thoát) Nếu bạn giả định 1 chuỗi thoát dịch sang 1 điểm mã, bạn sẽ phải chịu số phận trên văn bản đó.
Sử dụng JSON phân tích cú pháp đầy đủ từ ngôn ngữ của sự lựa chọn của bạn là đáng kể mạnh mẽ hơn:
$ echo '["foo bar \u0144\n"]' | python -c 'import json, sys; sys.stdout.write(json.load(sys.stdin)[0].encode("utf-8"))'
Đó là thực sự chỉ ăn các dữ liệu để kịch bản này python ngắn:
import json
import sys
data = json.load(sys.stdin)
data = data[0] # change this to find your string in the JSON
sys.stdout.write(data.encode('utf-8'))
Từ đó bạn có thể lưu dưới dạng foo.py
và gọi số curl ... | foo.py
Ví dụ sẽ phá vỡ hầu hết các lần thử khác trong câu hỏi này là "\ud83d\udca3"
:
% printf '"\\ud83d\\udca3"' | python2 -c 'import json, sys; sys.stdout.write(json.load(sys.stdin)[0].encode("utf-8"))'; echo
# echo will result in corrupt output:
% echo -e $(printf '"\\ud83d\\udca3"')
"������"
# native2ascii won't even try (this is correct for its intended use case, however, just not ours):
% printf '"\\ud83d\\udca3"' | native2ascii -encoding utf-8 -reverse
"\ud83d\udca3"
Xem thêm Unix & Linux: ** [Trong bash, làm cách nào tôi có thể chuyển đổi Codecoint Unicode \ [0-9A-F \] thành ký tự inabale?] (Http: // unix .stackexchange.com/questions/12273) ** – hippietrail