/// <summary> /// Gibt die im <see cref="DataUrl"/> eingebetteten binären Daten zurück oder <c>null</c>, /// wenn der <see cref="DataUrl"/> keine eingebetteten binäre Daten enthält oder wenn /// diese nicht dekodiert werden konnten. /// </summary> /// <returns>Die eingebetteten binären Daten oder <c>null</c>.</returns> public byte[]? GetEmbeddedBytes() { try { return(this.Encoding == DataEncoding.Base64 ? Base64Parser.ParseBase64(EncodedData) : System.Text.Encoding.UTF8.GetBytes(Uri.UnescapeDataString(EncodedData ?? ""))); } catch { return(null); } }
/// <summary> /// Gibt den im <see cref="DataUrl"/> eingebetteten Text zurück oder <c>null</c>, /// wenn der <see cref="DataUrl"/> eingebettete binäre Daten enthält. /// </summary> /// <returns>Der eingebettete Text oder <c>null</c>.</returns> public string?GetEmbeddedText() { if (!ContainsText) { return(null); } if (Encoding == DataEncoding.Base64) { // als Base64 codierter Text: byte[] data; try { data = Base64Parser.ParseBase64(EncodedData); } catch { return(null); } string?charsetValue = MimeType.Parameters?.FirstOrDefault(x => x.Key == "charset").Value; int codePage = TextEncodingConverter.GetCodePage(data, out int bomLength); Encoding enc = bomLength != 0 ? TextEncodingConverter.GetEncoding(codePage) : StringComparer.OrdinalIgnoreCase.Equals(charsetValue, "US-ASCII") ? System.Text.Encoding.UTF8 : TextEncodingConverter.GetEncoding(charsetValue); try { return(enc.GetString(data, bomLength, data.Length - bomLength)); } catch { return(null); } } else { // Url-Codierter UTF-8-String: return(Uri.UnescapeDataString(EncodedData ?? "")); } }