|
@@ -64,24 +64,26 @@ CyrillicDecoder& cyrillic_decoder()
|
|
|
Decoder* decoder_for(const String& a_encoding)
|
|
|
{
|
|
|
auto encoding = get_standardized_encoding(a_encoding);
|
|
|
- if (encoding.equals_ignoring_case("windows-1252"))
|
|
|
- return &latin1_decoder();
|
|
|
- if (encoding.equals_ignoring_case("utf-8"))
|
|
|
- return &utf8_decoder();
|
|
|
- if (encoding.equals_ignoring_case("utf-16be"))
|
|
|
- return &utf16be_decoder();
|
|
|
- if (encoding.equals_ignoring_case("iso-8859-2"))
|
|
|
- return &latin2_decoder();
|
|
|
- if (encoding.equals_ignoring_case("windows-1255"))
|
|
|
- return &hebrew_decoder();
|
|
|
- if (encoding.equals_ignoring_case("windows-1251"))
|
|
|
- return &cyrillic_decoder();
|
|
|
+ if (encoding.has_value()) {
|
|
|
+ if (encoding.value().equals_ignoring_case("windows-1252"))
|
|
|
+ return &latin1_decoder();
|
|
|
+ if (encoding.value().equals_ignoring_case("utf-8"))
|
|
|
+ return &utf8_decoder();
|
|
|
+ if (encoding.value().equals_ignoring_case("utf-16be"))
|
|
|
+ return &utf16be_decoder();
|
|
|
+ if (encoding.value().equals_ignoring_case("iso-8859-2"))
|
|
|
+ return &latin2_decoder();
|
|
|
+ if (encoding.value().equals_ignoring_case("windows-1255"))
|
|
|
+ return &hebrew_decoder();
|
|
|
+ if (encoding.value().equals_ignoring_case("windows-1251"))
|
|
|
+ return &cyrillic_decoder();
|
|
|
+ }
|
|
|
dbgln("TextCodec: No decoder implemented for encoding '{}'", a_encoding);
|
|
|
return nullptr;
|
|
|
}
|
|
|
|
|
|
// https://encoding.spec.whatwg.org/#concept-encoding-get
|
|
|
-String get_standardized_encoding(const String& encoding)
|
|
|
+Optional<String> get_standardized_encoding(const String& encoding)
|
|
|
{
|
|
|
String trimmed_lowercase_encoding = encoding.trim_whitespace().to_lowercase();
|
|
|
|
|
@@ -172,7 +174,8 @@ String get_standardized_encoding(const String& encoding)
|
|
|
|
|
|
bool is_standardized_encoding(const String& encoding)
|
|
|
{
|
|
|
- return encoding.equals_ignoring_case(get_standardized_encoding(encoding));
|
|
|
+ auto standardized_encoding = get_standardized_encoding(encoding);
|
|
|
+ return standardized_encoding.has_value() && encoding.equals_ignoring_case(standardized_encoding.value());
|
|
|
}
|
|
|
|
|
|
String UTF8Decoder::to_utf8(const StringView& input)
|