diff --git a/HTMLKit/HTMLInputStreamReader.m b/HTMLKit/HTMLInputStreamReader.m index b801ffe..ff2dc16 100644 --- a/HTMLKit/HTMLInputStreamReader.m +++ b/HTMLKit/HTMLInputStreamReader.m @@ -66,7 +66,7 @@ [HTMLInputStreamReaderErrors emitParseError:HTMLStreamReaderErrorIsolatedLowSurrogate atLocation:_location andCallback:_errorCallback]; - return REPLACEMENT_CHAR; + return nextInputCharacter; } if (CFStringIsSurrogateHighCharacter(nextInputCharacter)) { @@ -75,7 +75,7 @@ [HTMLInputStreamReaderErrors emitParseError:HTMLStreamReaderErrorIsolatedHighSurrogate atLocation:_location andCallback:_errorCallback]; - return REPLACEMENT_CHAR; + return nextInputCharacter; } nextInputCharacter = CFStringGetLongCharacterForSurrogatePair(nextInputCharacter, surrogateLow); diff --git a/HTMLKit/HTMLTokenizerCharacters.h b/HTMLKit/HTMLTokenizerCharacters.h index 5071ead..116c838 100644 --- a/HTMLKit/HTMLTokenizerCharacters.h +++ b/HTMLKit/HTMLTokenizerCharacters.h @@ -175,5 +175,7 @@ NS_INLINE NSString * StringFromUniChar(unichar character) NS_INLINE NSString * StringFromUTF32Char(UTF32Char character) { - return [[NSString alloc] initWithBytes:&character length:sizeof(character) encoding:NSUTF32LittleEndianStringEncoding]; + unichar pair[2]; + Boolean isPair = CFStringGetSurrogatePairForLongCharacter(character, pair); + return [[NSString alloc] initWithCharacters:(const unichar *)&pair length:(isPair ? 2 : 1)]; }