我不知道这是 Node.js 还是 iOS 问题,但是当我尝试发送包含变音符号(ä、ö 和 ü)的 JSON 对象时,设置的内容长度似乎是错误的。
所以这是我的设置:
我的 Node.js 服务器通过以下方式发送数据:
[..mongodb request..].toArray(function(err, result) {
res.setHeader('Content-Type', 'application/json');
var body = JSON.stringify(result);
console.log(body);
console.log(body.length);
res.setHeader('charset', 'utf8');
res.setHeader('Content-Length', body.length);
res.end(body);
});
这会产生以下对象:
[
{
"_id": "51da7eb5d5f9ad77302a26c6",
"loc": [
53.560994,
9.929796
],
"street": "Kühnehöfe 25",
"time": 1373273781535
},
{
"_id": "51da7eb9d5f9ad77302a26c7",
"loc": [
53.561899,
9.930203
],
"street": "Kühnehöfe 17",
"time": 1373273785156
}
]
它的长度(解析为字符串)为 215。这也被设置为内容长度。
在我的 iOS 项目中,我有以下设置:
-(void)serverRequest {
// Initialize new mutable data
NSMutableData *data = [[NSMutableData alloc] init];
self.receivedData = data;
// Initialize URL that is going to be fetched.
NSURL *url = [NSURL URLWithString:@"http://localhost:8000/getSpots"];
// Initialize a request from a URL
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[url standardizedURL]];
// Set HTTP method
[request setHTTPMethod:@"POST"];
// Initialize post data
NSDictionary* jsonDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:coordinate.latitude], @"lat", [NSNumber numberWithFloat:coordinate.longitude], @"lng", accessToken, @"accessToken", nil];//dictionaryWithObjectsAndKeys:coord.latitude, nil]
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict
options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
error:&error];
// Set request content type we MUST set this value.
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"content-type"];
// Set post data of request
[request setHTTPBody:jsonData];
// Initialize a connection from request
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
self.connectionGetSpots = connection;
// Start the connection
[connection start];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.receivedData appendData:data];
NSLog(@"loading: %d, %lld", [self.receivedData length], dataSize); // Both 215 (correct)
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
dataSize = [response expectedContentLength];
NSLog(@"dataSize: %lld", dataSize); // is 215 (correct)
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSString *responseData = [[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding];
NSLog(@"rD: %@, %d" ,responseData, [responseData length]);
}
connectionDidFinishLoading 函数记录如下:
[
{
"_id": "51da7eb5d5f9ad77302a26c6",
"loc": [
53.560994,
9.929796
],
"street": "Kühnehöfe 25",
"time": 1373273781535
},
{
"_id": "51da7eb9d5f9ad77302a26c7",
"loc": [
53.561899,
9.930203
],
"street": "Kühnehöfe 17",
"time": 13732737851
,211
如您所见,JSON 对象中有四个元音变音,并且缺少四个字符。如果我添加另一个带有两个元音变音的位置,则会再丢失两个字符。
我猜某处内容类型设置错误,但我不确定我必须做什么。
最佳答案
将其用于正确的 UTF-8 长度:
new Buffer(body).length
关于ios - 将变音符号从 Node.js 发送到 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17523058/
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
有谁知道在Heroku的Bamboo堆栈上启动并运行使用DataMapper的Sinatra应用程序所需的魔法咒语?Bamboo堆栈不包含任何预安装的系统gem,无论我尝试使用何种gem组合,我都会不断收到此错误:undefinedmethod`auto_upgrade!'forDataMapper:Module(NoMethodError)这是我的.gems文件中的内容:sinatrapgdatamapperdo_postgresdm-postgres-adapter这些是我将应用程序推送到Heroku时安装的依赖项:----->Herokureceivingpush----->Si
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我想知道我应该如何着手这个项目。我需要每周向人们发送一次电子邮件。但是,这必须在每周的特定时间自动生成并发送。编码有多难?我需要知道是否有任何书籍可以提供帮助,或者你们中的任何人是否可以指导我。它必须使用rubyonrails进行编程。因此有一个网络服务和数据库集成。干杯 最佳答案 为什么这么复杂?您只需安排工作。您可以使用Delayed::Job例如。Delayed::Job让您可以使用run_at符号在特定时间安排作业,如下所示:Delayed::Job.enqueue(SendEmailJob.new(...),:run_
我开始了一个新的Rails3.2.5项目,Assets管道不再工作了。CSS和Javascript文件不再编译。这是尝试生成Assets时日志的输出:StartedGET"/assets/application.css?body=1"for127.0.0.1at2012-06-1623:59:11-0700Servedasset/application.css-200OK(0ms)[2012-06-1623:59:11]ERRORNoMethodError:undefinedmethod`each'fornil:NilClass/Users/greg/.rbenv/versions/1
rails新手。只是想了解\assests目录中的这两个文件。例如,application.js文件有如下行://=requirejquery//=requirejquery_ujs//=require_tree.我理解require_tree。只是将所有JS文件添加到当前目录中。根据上下文,我可以看出requirejquery添加了jQuery库。但是它从哪里得到这些jQuery库呢?我没有在我的Assets文件夹中看到任何jquery.js文件——或者直接在我的整个应用程序中没有看到任何jquery.js文件?同样,我正在按照一些说明安装TwitterBootstrap(http:
我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每