我正在尝试编写一个简单的 PHP Web 服务,作为我的 Web 服务器上的 MySQL 数据库和 Objective-C Cocoa 桌面应用程序之间的桥梁。据我所知,链中的每个链接都在 UTF-8 中工作,但我似乎无法让非标准字符在 Cocoa 中显示;相反,我的界面元素只显示转义。
我愿意接受任何可以让我在任何阶段解决此问题的解决方案;我正在编写 PHP 和 Obj-C 端,所以我应该能够处理服务器端或客户端的问题。我只是不知道在这一点上打哪个痣。
数据库
信息来自 MySQL 数据库中的表;数据库排序规则和每个字段都设置为 utf_general_ci。
PDO
我的 PHP Web 服务使用 PDO 获取数据:
$pdo = new PDO('mysql:host=mysql.hostname.com;dbname=tst_data_model', 'user', 'password', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
if ($pdo) {} else {die();}
$stmt = $pdo->prepare("SELECT * FROM team");
$stmt->execute();
PHP
然后我回显数据:
header('Content-Type: text/html; charset=utf-8');
echo("<TEAM>\r");
echo("<team_id>{$row['team_id']}</team_id>\r");
echo("<name_full_native>{$row['name_full_native']}</name_full_native>\r");
echo("<name_short_native>{$row['name_short_native']}</name_short_native>\r");
echo("<name_full_english>{$row['name_full_english']}</name_full_english>\r");
echo("<name_short_english>{$row['name_short_english']}</name_short_english>\r");
echo("</TEAM>\r\r");
NSDATA
桌面应用程序使用 NSURLConnection 获取这些数据:
NSData* returnValue = [NSURLConnection sendSynchronousRequest:teamArrayRequest returningResponse:NULL error:NULL];
NSString
最后,我从数据中提取字符串,指定 UTF8 字符串编码:
NSString* rVString = [[NSString alloc] initWithData:returnValue encoding:NSUTF8StringEncoding];
当我在调试器中查看此字符串或将其发送到 NSTextView 时,我看到的只是 \u 转义:
Borussia M\U00f6nchengladbach
Quer\U00e9taro
真正的西班牙\U00f1a
我错过了什么吗?这些逃跑是从哪里来的?