我不會擔心JSON消息本身可能是UTF8編碼,也可能不是。消息的編碼不會影響內容的編碼。
假設我們要傳輸含一次每個字節爲256字節的字符串:當我們編碼
my $string = join '', map chr, 0x00 .. 0xFF;
和解碼的消息,我們結束了一個等效的字符串再次:
my $message = encode_json { str => $string };
my $new_string = (decode_json $message)->{str};
$new_string eq $string or die "The strings aren't equal";
雖然字符串相同,但它們沒有相同的內容。
use utf8;
# this may die if the $new_string contains characters outside of
# the native encoding
utf8::downgrade($new_string);
如何以及爲什麼這個工程是非常明確的,但通過使用ASCII唯一編碼裝甲的消息固然可取::
我們可以通過「降級」新的字符串實現這一目標
use MIME::Base64;
use JSON;
my $string = join '', map chr, 0x00 .. 0xFF;
my $message = encode_json { str => encode_base64 $string };
my $new_string = decode_base64 decode_json($message)->{str};
$string eq $new_string or die;
你需要安全嗎? – Raptor
@Raptor,我正在考慮某些字符可能不符合UTF-8的情況。 – Prabu
是的,我會對郵件進行64位編碼。 –