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