将ASCII符号插入字符串(Swift)

时间:2016-07-31 11:26:02

标签: swift string utf-8 ascii

我正在尝试将带有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)))"

但这产生了相同的结果。如何妥善逃脱?

1 个答案:

答案 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)