我正在尝试将带有ASCII代码255(Telnet IAC)的符号插入到字符串中,但是当将数据转换回utf8时,我得到一个不同的符号:
var s = "\u{ff}"
print(s.utf8.count) // 2
try! s.write(toFile: "output.txt", atomically: true, encoding: .utf8)
该文件包含C3 BF
,而不是FF
。我也尝试过使用
var s = "\(Character(UnicodeScalar(255)))"
但这产生了相同的结果。如何妥善逃脱?
答案 0 :(得分:3)
ASCII定义了从0x00到0x7F的128个字符。不包括0xFF(255)。
在Unicode中,U + 00FF(在Swift中,“\ u {ff}”)代表“ÿ”(带有DIARESIS的LATIN SMALL LETTER Y)。 其UTF-8表示为0xC3 0xBF。参见UTF-8,代码点从U + 0080到U + 07FF的字符用双字节序列表示。 另外你需要知道0xFF不是UTF-8字节序列中的有效字节,这意味着你不能在UTF-8文本文件中获得任何0xFF字节。
如果要输出“\ u {ff}”作为单字节0xFF,请改用ISO-8859-1(又名ISO-Latin-1):
try! s.write(toFile: "output.txt", atomically: true, encoding: .isoLatin1)