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)];
}