Objective-C NSLog(@"\xc2\xbfhello") и javascript console.log("\xc2\xbfhello") имеет другой результат, почему?
NSLog(@"\xc2\xbfhello")
console.log("\xc2\xbfhello")
Похоже, что шестнадцатеричная escape-последовательность \x в Javascript имеет фиксированную длину две цифры, которые не используют кодировку UTF-8. Таким образом, чтобы получить ¿ вам нужно всего лишь 0xBF:
\x
¿
0xBF
console.log('\xbfhello');
или String.fromCharCode(0x00bf) или String.fromCharCode(0x000000bf)
String.fromCharCode(0x00bf)
String.fromCharCode(0x000000bf)
\x в NSLog использует кодировку UTF-8.
NSLog
Так что, если вы пытаетесь вывести ¿hello, это будет:
¿hello
NSLog(@"\xc3\x82\xc2\xbfhello");
или просто ¿hello, вы можете использовать escape-последовательность Unicode, которая будет одинаковой в обоих:
¿hello
NSLog(@"\u00bfhello");
и
console.log('\u00bfhello');
Подробнее здесь:
https://www.fileformat.info/info/unicode/char/00bf/index.htm
Здесь для Unicode в Javascript:
https://dmitripavlutin.com/what-every-javascript-developer-should-know-about-unicode/
Здесь для Unicode в Objective-C:
https://www.objc.io/issues/9-strings/unicode/