@@ -29,24 +29,24 @@ int _OFString_URLEncoding_reference; @implementation OFString (URLEncoding) - (OFString*)stringByURLEncoding { - const char *string = [self cString]; + const char *string = [self UTF8String]; char *retCString; size_t i; OFString *ret; /* * Worst case: 3 times longer than before. * Oh, and we can't use [self allocWithSize:] here as self might be a * @"" literal. */ - if ((retCString = malloc(([self cStringLength] * 3) + 1)) == NULL) + if ((retCString = malloc(([self UTF8StringLength] * 3) + 1)) == NULL) @throw [OFOutOfMemoryException newWithClass: isa - requestedSize: ([self cStringLength] * 3) + 1]; + requestedSize: ([self UTF8StringLength] * 3) + 1]; for (i = 0; *string != '\0'; string++) { if (isalnum((int)*string) || *string == '-' || *string == '_' || *string == '.' || *string == '~') retCString[i++] = *string; @@ -63,12 +63,12 @@ (low > 9 ? low - 10 + 'A' : low + '0'); } } @try { - ret = [OFString stringWithCString: retCString - length: i]; + ret = [OFString stringWithUTF8String: retCString + length: i]; } @finally { free(retCString); } return ret; @@ -75,20 +75,20 @@ } - (OFString*)stringByURLDecoding { OFString *ret; - const char *string = [self cString]; + const char *string = [self UTF8String]; char *retCString; char byte = 0; int state = 0; size_t i; - if ((retCString = malloc([self cStringLength] + 1)) == NULL) + if ((retCString = malloc([self UTF8StringLength] + 1)) == NULL) @throw [OFOutOfMemoryException newWithClass: isa - requestedSize: [self cStringLength] + 1]; + requestedSize: [self UTF8StringLength] + 1]; for (i = 0; *string; string++) { switch (state) { case 0: if (*string == '%') @@ -129,12 +129,13 @@ free(retCString); @throw [OFInvalidEncodingException newWithClass: isa]; } @try { - ret = [OFString stringWithCString: retCString]; + ret = [OFString stringWithUTF8String: retCString + length: i]; } @finally { free(retCString); } return ret; } @end