I have some NSData output that I would like to convert to a string.
NSString * test = [NSString stringWithFormat:#"myfile.txt];
NSData *myData = [[NSData alloc] initWithContentsOfFile:(#"%#", test)];
This NSData was saved to a file, it looks like : 21fa9731 27c67c00 da1c3349 d82470eb 56f97b88 559f406c 6abecbb7 de020007 47a4541d 99c9c5e7 883f8bf1 165fba39
Do you know a way to get this string back as it was in "myfile.txt" ?
Thanks !
If data file somewhere on HDD (not in app bundle) you must provide full path to your data file.
NSString * test = [NSString stringWithFormat:#"myfile.txt];
NSData *myData = [[NSData alloc] initWithContentsOfFile:(#"%#", test)];
NSString* myString = [NSString alloc]initWithData:myData
encoding: NSUTF8StringEncoding];
Choose encoding in which you save you data file.
I don't know what your problem ist. You could share with us how the file was written so that we can get a bit closer.
However, you are doing much too complicated and therefore error prone. The following would to for reading a file with a constant name fo myfile.txt.
NSData *myData = [[NSData alloc] initWithContentsOfFile:#"myfile.txt"];
Frankly I don't even know in which directory myfile.txt is expected to be. And there are of course much better ways to deal with constant literals than using literals directly in the code.
BTW, what do you actually receive in myData? null?
(This is more of a comment than an answer, but the formatting is much better in answers.)
Related
In my Mac app I am getting Data from hey JSON web service and one of the fields is an image. When I do a NSLog(#"%#", [dict valueForKeyPath:#"profileImageDataString"] ); I see all of the data and it is correct. And I can also put it in a NSURL object like this NSURL *imgUrl = [dict valueForKeyPath:#"profileImageDataString"]; and it is still correct. But when I try this NSData *imgData = [NSData dataWithContentsOfURL:imgUrl]; or this NSImage *userImage = [[NSImage alloc] initWithContentsOfURL:imgUrl];I get the error unrecognized selector sent to instance. If I put the data in a NSString, two thirds is cut off at the end.
I am trying to save the Image data from the Jason web service into a text file to that later it can be loaded into a NSImage on in a user settings view.
Someone tell me what it is that I'm doing wrong?
This is the value of profileImageDataString that is returned by the web service;
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
The string seems to be a base64 encoded string representation of an image.
Try to create an NSData object from the string and the image from the data.
NSString *imgDataString = [dict objectForKey:#"profileImageDataString"];
NSData *imgData = [[NSData alloc] initWithBase64EncodedString:imgDataString options:0];
NSImage *userImage = [[NSImage alloc] initWithData:imgData];
And I can also put it in a NSURL object like this NSURL *imgUrl = [dict valueForKeyPath:#"profileImageDataString"]; and it is still correct.
You haven't got an NSURL object. You've got an NSString object. Declaring that your pointer refers to an NSURL and using the untyped getter valueForKeyPath: (or, even, much more correctly, objectForKey:) does not change the type of the object.
To convert a string to a URL use +[NSURL URLWithString:]. But what you're showing us isn't a URL. So why try to make it one at all?
But when I try this NSData *imgData = [NSData dataWithContentsOfURL:imgUrl]; or this NSImage *userImage = [[NSImage alloc] initWithContentsOfURL:imgUrl];I get the error unrecognized selector sent to instance.
That's because you're supplying an NSString, which does not implement the same selectors as an NSURL.
If I put the data in a NSString, two thirds is cut off at the end.
No it isn't; however when you log any object, all you get is enough information to help in debugging. Using NSLog is not intended to be a way to store the same amount of data in another form, or indeed to do anything strictly well defined other than help you to debug.
Get your string, use the approach as suggested by vadian.
I am trying to copy the content of an XML file after selection from NSOpenPanel in cocoa.
So lets say this XML file could be any where on desktop or other directories. Once I get the file Path, I am trying to read/copy the content to an NSMutableData like following.
I have filePath:
NSString* filePath = [files objectAtIndex:0];
e.g.: file://localhost/Users/Me/Documents/XMLFiles/FileA.xml
Trying to get the content and copy to an NSMutableData
xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath];
or
xmlData = [[NSMutableData alloc] initWithContentsOfURL:[NSURL URLWithString:filePath]];
If you truly want the data under NSMutableData form then the following should help you:
NSMutableData *theData = [NSMutableData dataWithContentsOfURL:[[theOpenPanel URLs] objectAtIndex:0]];
But I don't think that would be very useful. Why have xml as raw data? Mutable at that!!
Are you looking for the string so you can manually look at the text document?! Then perhaps this is what you're looking for : NSString's stringWithContentsOfFile:encoding:error
Perhaps you want to parse it afterwards?! Then I'd suggest reading on NSXMLParser.
I'm querying a web server which returns a JSON string as NSData. The string is in UTF-8 format so it is converted to an NSString like this.
NSString *receivedString = [[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding];
However, some UTF-8 escapes remain in the outputted JSON string which causes my app to behave erratically. Things like \u2019 remain in the string. I've tried everything to remove them and replace them with their actual characters.
The only thing I can think of is to replace the occurances of UTF-8 escapes with their characters manually, but this is a lot of work if there's a quicker way!
Here's an example of an incorrectly parsed string:
{"title":"The Concept, Framed, The Enquiry, Delilah\u2019s Number 10 ","url":"http://livebrum.co.uk/2012/05/31/the-concept-framed-the-enquiry-delilah\u2019s-number-10","date_range":"31 May 2012","description":"","venue":{"title":"O2 Academy 3 ","url":"http://livebrum.co.uk/venues/o2-academy-3"}
As you can see, the URL hasn't been completely converted.
Thanks,
The \u2019 syntax isn't part of UTF-8 encoding, it's a piece of JSON-specific syntax. NSString parses UTF-8, not JSON, so doesn't understand it.
You should use NSJSONSerialization to parse the JSON then pull the string you want from the output of that.
So, for example:
NSError *error = nil;
id rootObject = [NSJSONSerialization
JSONObjectWithData:receivedData
options:0
error:&error];
if(error)
{
// error path here
}
// really you'd validate this properly, but this is just
// an example so I'm going to assume:
//
// (1) the root object is a dictionary;
// (2) it has a string in it named 'url'
//
// (technically this code will work not matter what the type
// of the url object as written, but if you carry forward assuming
// a string then you could be in trouble)
NSDictionary *rootDictionary = rootObject;
NSString *url = [rootDictionary objectForKey:#"url"];
NSLog(#"URL was: %#", url);
I'm trying to display some japanese text on the ios simulator and an ipod touch. The text is read from an XML file. The header is:
<?xml version="1.0" encoding="utf-8"?>
When the text is in english, it displays fine. However, when the text is Japanese, it comes out as an unintelligible mishmash of single-byte characters.
I have tried saving the file specifically as unicode using TextEdit. I'm using NSXMLParser to parse the data. Any ideas would be much appreciated.
Here is the parsing code
// Override point for customization after application launch.
NSString *xmlFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:#"questionsutf8.xml"];
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath];
NSData *data = [NSData dataWithBytes:[xmlFileContents UTF8String] length:[xmlFileContents lengthOfBytesUsingEncoding: NSUTF8StringEncoding]];
XMLReader *xmlReader = [[XMLReader alloc] init];
[xmlReader parseXMLData: data];
stringWithContentsOfFile: is a deprecated method. It does not do encoding detection unless the file contains the appropriate byte order mark, otherwise it interprets the file as the default C string encoding (the encoding returned by the +defaultCStringEncoding method). Instead, you should use the non-deprecated [and encoding-detecting] method stringWithContentsOfFile:usedEncoding:error:.
You can use it like this:
NSStringEncoding enc;
NSError *error;
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath
usedEncoding:&enc
error:&error];
if (xmlFileContents == nil)
{
NSLog (#"%#", error);
return;
}
First, you should verify with TextWrangler (free from the Mac app store or barebones.com) that your XML file truly is UTF-8 encoded.
Second, try creating xmlFileContents with +stringWithContentsOfFile:encoding:error:, explicitly specifying UTF-8 encoding. Or, even better, bypass the intermediate string entirely, and create data with +dataWithContentsOfFile:.
I'm attempting to take an NSImage and convert it to a string which I can write in an XML document.
My current attempt looks something like this:
[xmlDocument setCharacterEncoding: #"US-ASCII"];
NSData* data = [image TIFFRepresentation];
NSString* string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
//Put string inside of NSXMLElement, write out NSXMLDocument.
Reading back in looks something like this:
NSXMLDocument* newXMLDocument = [[NSXMLDocument alloc] initWithData:data options:0 error:outError];
//Here's where it fails. I get:
//Error Domain=NSXMLParserErrorDomain Code=9 UserInfo=0x100195310 "Line 7: Char 0x0 out of allowed range"
I assume I'm missing something basic. What's up with this encoding issue?
First of all, embedding large amounts of binary data in XML is not a good idea, IMHO.
To answer your question, you need an encoding scheme that supports binary data, such as Base64.
See this page for more than one way to represent arbitrary NSData as a Base64-encoded string: http://www.cocoadev.com/index.pl?BaseSixtyFour
UPDATE: The link to Colloquy's NSData additions seems to be broken on that page. Here's the new URL: http://colloquy.info/project/browser/trunk/Additions/NSDataAdditions.m