当我从UITextField获取打字内容时,哪些characterset是NSString的默认字符集?
我开发了一个应用程序,它将这样的NSStrings发送到基于UTF8的REST-API。在后端,有一个基于utf8的MySQL数据库和基于utf8的varchar-fields。 我的POST-Request将字符串数据从iOS App发送到服务器。使用GET-Request我会从REST API接收这些字符串。
在App中,一切都打印得很好。特殊的UTF-8字符如ÄÖÜ在将它们发送到服务器后以及在收到它们之后正确显示。
但是,当我进入REST API服务器的mysql-console,并对这些数据执行SELECT-Command时,会出现断字符。
可能是根本原因? Apple在哪些characterset中使用NSString?
答案 0 :(得分:3)
听起来这是一个服务器问题。检查您使用的版本是否支持UTF-8,旧版本不支持。请参阅:How to support full Unicode in MySQL database
MySQL的utf8编码与正确的UTF-8编码不同。它不提供完整的Unicode支持。
MySQL 5.5.3(2010年初发布)引入了一个名为utf8mb4的新编码,该编码映射到正确的UTF-8,因此完全支持Unicode。
NSString在内部表示中基本上是不透明的。
UITextField
方法text
会返回NSString
。
如果您希望使用字符串中的数据发送到服务器,请使用- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding
并指定NSUTF8StringEncoding
等编码。
NSData *textFieldUTF8Data = [textFieldInstance.text dataUsingEncoding: NSUTF8StringEncoding];
答案 1 :(得分:0)
如果通过“mysql console”指的是Windows中类似DOS的窗口,则需要:
命令“chcp”控制“代码页”。 chcp 65001提供了utf8,但它也需要安装一个特殊的字符集。一些代码页 在控制台窗口中设置字体:右键单击窗口标题→属性→字体→选择Lucida控制台
另外,通过SET NAMES utf8mb4
告诉'控制台'你的字节是UTF8。