diff --git a/S7.Net/Types/S7String.cs b/S7.Net/Types/S7String.cs index 5bc383ef..46c4808a 100644 --- a/S7.Net/Types/S7String.cs +++ b/S7.Net/Types/S7String.cs @@ -8,7 +8,19 @@ namespace S7.Net.Types /// An S7 String has a preceeding 2 byte header containing its capacity and length /// public static class S7String - { + { + private static Encoding stringEncoding = Encoding.ASCII; + + /// + /// The Encoding used when serializing and deserializing S7String (Encoding.ASCII by default) + /// + /// StringEncoding must not be null + public static Encoding StringEncoding + { + get => stringEncoding; + set => stringEncoding = value ?? throw new ArgumentNullException(nameof(StringEncoding)); + } + /// /// Converts S7 bytes to a string /// @@ -30,7 +42,7 @@ public static string FromByteArray(byte[] bytes) try { - return Encoding.ASCII.GetString(bytes, 2, length); + return StringEncoding.GetString(bytes, 2, length); } catch (Exception e) { @@ -38,7 +50,6 @@ public static string FromByteArray(byte[] bytes) $"Failed to parse {VarType.S7String} from data. Following fields were read: size: '{size}', actual length: '{length}', total number of bytes (including header): '{bytes.Length}'.", e); } - } /// @@ -56,7 +67,7 @@ public static byte[] ToByteArray(string value, int reservedLength) if (reservedLength > 254) throw new ArgumentException($"The maximum string length supported is 254."); - var bytes = Encoding.ASCII.GetBytes(value); + var bytes = StringEncoding.GetBytes(value); if (bytes.Length > reservedLength) throw new ArgumentException($"The provided string length ({bytes.Length} is larger than the specified reserved length ({reservedLength})."); var buffer = new byte[2 + reservedLength];