由于已经说过,在Swift中,一个字符串存储Unicode字符,而不是 - (在Objective-)C中 - 一个char
的任意(NUL结尾)序列,在大多数平台上是有符号的 或无符号字节。
现在理论上你可以从斯威夫特字符串检索C字符串:
let commands = NSMutableData()
let cmd = "\u{1b}\u{61}\u{01}"
cmd.withCString {
commands.appendBytes($0, length: 3)
}
println(commands) // <1b6101>
但是,这会产生并不适用于所有非ASCII字符预期的结果:
let commands = NSMutableData()
let cmd = "\u{1b}\u{c4}\u{01}"
cmd.withCString {
commands.appendBytes($0, length: 3)
}
println(commands) // <1bc384>
这里\u{c4}
是“ “它具有UTF-8表示C3 84
。
Swift字符串不能表示任意字节序列。 因此你最好有UInt8
数组(二进制)控制序列工作:
let commands = NSMutableData()
let cmd : [UInt8] = [ 0x1b, 0x61, 0xc4, 0x01 ]
commands.appendBytes(cmd, length: cmd.count)
println(commands) // <1b61c401>
对于文本你必须知道哪些编码打印机的期望。 作为一个例子,NSISOLatin1StringEncoding
是ISO-8859-1编码,其意在“西欧”语言:
let text = "123Ö\n"
if let data = text.dataUsingEncoding(NSISOLatin1StringEncoding) {
commands.appendData(data)
println(commands) // 313233d6 0a>
} else {
println("conversion failed")
}
明白了,如果我想用其他文字输入Ä我想我会这样做? commands.appendData(“Test \ nAddress \ n \ u {c384} rtor \ n”.dataUsingEncoding(NSUTF8StringEncoding!)),但打印机实际上是打印8?(它的侧面是8)为什么? – 2014-10-11 15:10:00
@SamPettersson:在Swift字符串中,您可以简单地编写“Ä”,或等效地为“\ u {c4}”。 \ u {c384}代表Unicode代码点U + C384 = HANGUL SYLLABLE SSE =쎄。该字符的UTF-8表示是“EC 8E 84”... - 对于更具体的答案,我们需要确切知道打印机打印“Ä”时应该使用哪个字节序列,特别是应使用哪种编码为人物。 – 2014-10-11 15:22:06
如果我在我的字符串中写Ä我得到一个看起来像|-ä的字符? – 2014-10-11 15:22:54