Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa iOS5:UTF-8编码根本不起作用_Cocoa_Encoding_Utf 8 - Fatal编程技术网

Cocoa iOS5:UTF-8编码根本不起作用

Cocoa iOS5:UTF-8编码根本不起作用,cocoa,encoding,utf-8,Cocoa,Encoding,Utf 8,我的应用程序能够使用POST函数将几个文本字段的输入发送到服务器上的PHP脚本,该函数将消息发送到我的电子邮件。问题是,有些字符无法“翻译”。例如:ü->ü 我已经检查了我的HTTP头,但它仍然是UTF-8 我还使用此代码转换字符: [textFieldName.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding] NSData *postData = [post dataUsingEncoding:NSU

我的应用程序能够使用POST函数将几个文本字段的输入发送到服务器上的PHP脚本,该函数将消息发送到我的电子邮件。问题是,有些字符无法“翻译”。例如:ü->ü

我已经检查了我的HTTP头,但它仍然是UTF-8

我还使用此代码转换字符:

[textFieldName.text stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]

NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversation:YES];
我做错了什么?甚至PHP文件也有以下代码:

function mail_utf8($to,$subject = '(No subject)',$message = '',$header = ''){
    $header_ = 'MIME-Version: 1.0' . "\r\n" . 'Content-type: text/plain; charset=UTF-8' . "\r\n";
    if(mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_ . $header)) return true;
    else return false;
  }
编辑:


方法
stringbyaddingpercentescapesusingencode
返回一个新的NSString对象。您需要捕获返回值,并使用它代替post数据中字段的原始值

NSString *encodedText = [ textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ] ;
NSData *postData = [ encodedText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES ] ;

方法
stringbyaddingpercentescapesusingencode
返回一个新的NSString对象。您需要捕获返回值,并使用它代替post数据中字段的原始值

NSString *encodedText = [ textField.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding ] ;
NSData *postData = [ encodedText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES ] ;

我通过显式地将
charset=utf-8
添加到我的
Content-Type
标题中,修复了发布JSON数据的类似问题。这可能也适用于你的情况

尝试:


我通过显式地将
charset=utf-8
添加到我的
Content-Type
标题中,修复了发布JSON数据的类似问题。这可能也适用于你的情况

尝试:


好的,我发现了错误:

正如Peter Hosey所说:错误在于在php中将utf-8字符集解码为ISO 8859-1。现在这是工作代码:

mail($email_to,$email_subject,utf8_decode($email_data),$email_header);

谢谢你们的帮助:)

好的,我发现了错误:

正如Peter Hosey所说:错误在于在php中将utf-8字符集解码为ISO 8859-1。现在这是工作代码:

mail($email_to,$email_subject,utf8_decode($email_data),$email_header);


谢谢你们的帮助:)

你们看到什么被上传到服务器上了?嗨,吉姆。我看不到任何帖子。我只是在电子邮件中看到输出。我如何查看发布到服务器的数据?让服务器记录它吗?你从来没有指定服务器如何转换数据或它期望的输入格式。吉姆,你必须容忍我。我不是专家:)。我可以看到一些日志,但没有什么特别的错误或其他。我可以安装一些东西使更多的数据可见吗?你看到什么被发布到服务器上了?嗨,吉姆。我看不到任何帖子。我只是在电子邮件中看到输出。我如何查看发布到服务器的数据?让服务器记录它吗?你从来没有指定服务器如何转换数据或它期望的输入格式。吉姆,你必须容忍我。我不是专家:)。我可以看到一些日志,但没有什么特别的错误或其他。我能安装一些东西让更多的数据可见吗?约翰,你能给我举个例子吗?非常感谢:)@sascha Edit举个例子。啊,约翰。我想我已经在使用你的代码了。编辑了第一篇文章给你看。约翰,你能给我举个例子吗?非常感谢:)@sascha Edit举个例子。啊,约翰。我想我已经在使用你的代码了。编辑第一篇文章向您展示,即Cocoa代码正确生成UTF-8;问题是PHP程序将其解释为一些8位编码,如ISO 8859-1,这就是为什么您会看到“ü”或其他任何内容(正确字符的UTF-8字节,用错误的编码解释)。然后,解决方案是告诉PHP程序它正在接收UTF-8,以便它将其解码为UTF-8。我认为Xcode不再是问题所在。@彼得:你会怎么做?@SaschaWieland:我认为罗布的答案是对的,但不知道有多接近。在PHP端进行检查,确保它得到了头并正确地处理它,即Cocoa代码正确地生成了UTF-8;问题是PHP程序将其解释为一些8位编码,如ISO 8859-1,这就是为什么您会看到“ü”或其他任何内容(正确字符的UTF-8字节,用错误的编码解释)。然后,解决方案是告诉PHP程序它正在接收UTF-8,以便它将其解码为UTF-8。我认为Xcode不再是问题所在。@彼得:你会怎么做?@SaschaWieland:我认为罗布的答案是对的,但不知道有多接近。在PHP端进行检查,确保它得到了标题并正确处理。不,这不是
utf8\u decode
所做的。(与PHP中的许多函数一样,它的名称很糟糕。)Read:它将文本从UTF-8转换为ISO 8859-1,这是一种有损转换。除非你绝对需要ISO 859-1,当你的目的是发送邮件时,你不应该考虑这个数据损坏。不,这不是<代码> UTF8L解码< /COD>。(与PHP中的许多函数一样,它的名称很糟糕。)Read:它将文本从UTF-8转换为ISO 8859-1,这是一种有损转换。除非你绝对需要ISO 859-1,否则当你发送邮件时,你不应该考虑这个数据损坏。