@@ -69,12 +69,12 @@ if ((i = of_string_unicode_to_utf8(c, buffer)) == 0) return nil; buffer[i] = 0; - return [OFString stringWithCString: buffer - length: i]; + return [OFString stringWithUTF8String: buffer + length: i]; } @implementation OFString (XMLUnescaping) - (OFString*)stringByXMLUnescaping { @@ -87,46 +87,51 @@ const char *string; size_t i, last, length; BOOL inEntity; OFMutableString *ret; - string = [self cString]; - length = [self cStringLength]; + string = [self UTF8String]; + length = [self UTF8StringLength]; ret = [OFMutableString string]; last = 0; inEntity = NO; for (i = 0; i < length; i++) { if (!inEntity && string[i] == '&') { - [ret appendCString: string + last - withLength: i - last]; + [ret appendUTF8String: string + last + withLength: i - last]; last = i + 1; inEntity = YES; } else if (inEntity && string[i] == ';') { const char *entity = string + last; size_t entityLength = i - last; if (entityLength == 2 && !memcmp(entity, "lt", 2)) [ret appendCString: "<" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 2 && !memcmp(entity, "gt", 2)) [ret appendCString: ">" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 4 && !memcmp(entity, "quot", 4)) [ret appendCString: "\"" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 4 && !memcmp(entity, "apos", 4)) [ret appendCString: "'" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 3 && !memcmp(entity, "amp", 3)) [ret appendCString: "&" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entity[0] == '#') { OFAutoreleasePool *pool; OFString *tmp; pool = [[OFAutoreleasePool alloc] init]; @@ -143,12 +148,13 @@ OFAutoreleasePool *pool; OFString *n, *tmp; pool = [[OFAutoreleasePool alloc] init]; - n = [OFString stringWithCString: entity - length: entityLength]; + n = [OFString + stringWithUTF8String: entity + length: entityLength]; tmp = [delegate string: self containsUnknownEntityNamed: n]; if (tmp == nil) @throw [OFInvalidEncodingException @@ -166,12 +172,12 @@ } if (inEntity) @throw [OFInvalidEncodingException newWithClass: isa]; - [ret appendCString: string + last - withLength: i - last]; + [ret appendUTF8String: string + last + withLength: i - last]; [ret makeImmutable]; return ret; } @@ -183,46 +189,51 @@ const char *string; size_t i, last, length; BOOL inEntity; OFMutableString *ret; - string = [self cString]; - length = [self cStringLength]; + string = [self UTF8String]; + length = [self UTF8StringLength]; ret = [OFMutableString string]; last = 0; inEntity = NO; for (i = 0; i < length; i++) { if (!inEntity && string[i] == '&') { - [ret appendCString: string + last - withLength: i - last]; + [ret appendUTF8String: string + last + withLength: i - last]; last = i + 1; inEntity = YES; } else if (inEntity && string[i] == ';') { const char *entity = string + last; size_t entityLength = i - last; if (entityLength == 2 && !memcmp(entity, "lt", 2)) [ret appendCString: "<" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 2 && !memcmp(entity, "gt", 2)) [ret appendCString: ">" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 4 && !memcmp(entity, "quot", 4)) [ret appendCString: "\"" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 4 && !memcmp(entity, "apos", 4)) [ret appendCString: "'" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entityLength == 3 && !memcmp(entity, "amp", 3)) [ret appendCString: "&" - withLength: 1]; + withEncoding: OF_STRING_ENCODING_ASCII + length: 1]; else if (entity[0] == '#') { OFAutoreleasePool *pool; OFString *tmp; pool = [[OFAutoreleasePool alloc] init]; @@ -240,12 +251,12 @@ OFString *entityString, *tmp; pool = [[OFAutoreleasePool alloc] init]; entityString = [OFString - stringWithCString: entity - length: entityLength]; + stringWithUTF8String: entity + length: entityLength]; tmp = block(self, entityString); if (tmp == nil) @throw [OFInvalidEncodingException newWithClass: isa]; @@ -260,14 +271,14 @@ } if (inEntity) @throw [OFInvalidEncodingException newWithClass: isa]; - [ret appendCString: string + last - withLength: i - last]; + [ret appendUTF8String: string + last + withLength: i - last]; [ret makeImmutable]; return ret; } #endif @end