diff --git a/README.md b/README.md index 7d4f33f..40f7b9d 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,8 @@ The connection string supports the options available in `DbfDataReaderOptions`: - Encoding - the encoding to be used - optional - string - - valid Encoding name from [Encoding](https://learn.microsoft.com/en-us/dotnet/api/System.Text.Encoding) + - defaults to null and uses the language from the DBF header + - valid Encoding web name from [Encoding](https://learn.microsoft.com/en-us/dotnet/api/System.Text.Encoding) e.g. 'ascii' - ReadFloatsAsDecimals - whether to read floats as decimals - optional - boolean diff --git a/src/DbfDataReader/DbfDbConnection.cs b/src/DbfDataReader/DbfDbConnection.cs index 9aa1841..679204f 100644 --- a/src/DbfDataReader/DbfDbConnection.cs +++ b/src/DbfDataReader/DbfDbConnection.cs @@ -2,6 +2,7 @@ using System.Data; using System.Data.Common; using System.IO; +using System.Text; namespace DbfDataReader { @@ -54,9 +55,9 @@ public override void Open() var options = new DbfDataReaderOptions(); - if (builder.Encoding is var encoding) + if (builder.Encoding is { } encoding) { - options.Encoding = encoding; + options.Encoding = Encoding.GetEncoding(encoding); } if (builder.ReadFloatsAsDecimals is var readFloatsAsDecimals) diff --git a/src/DbfDataReader/DbfDbConnectionStringBuilder.cs b/src/DbfDataReader/DbfDbConnectionStringBuilder.cs index aeca774..482ed04 100644 --- a/src/DbfDataReader/DbfDbConnectionStringBuilder.cs +++ b/src/DbfDataReader/DbfDbConnectionStringBuilder.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Data.Common; using System.Diagnostics; -using System.Text; namespace DbfDataReader { @@ -25,7 +24,7 @@ private enum Keywords private static readonly string[] ValidKeywords = BuildValidKeywords(); private static readonly Dictionary KeywordsHash = BuildKeywordsHash(); - private Encoding _encoding; + private string _encoding; private string _folder = string.Empty; private bool _readFloatsAsDecimals; private bool _skipDeletedRecords = true; @@ -57,7 +56,7 @@ public override object this[string keyword] Keywords index = GetIndex(keyword); switch (index) { - case Keywords.Encoding: Encoding = DbfDbConnectionStringBuilderUtil.ConvertToEncoding(keyword, value); break; + case Keywords.Encoding: Encoding = DbfDbConnectionStringBuilderUtil.ConvertToString(value); break; case Keywords.Folder: Folder = DbfDbConnectionStringBuilderUtil.ConvertToString(value); break; case Keywords.ReadFloatsAsDecimals: ReadFloatsAsDecimals = DbfDbConnectionStringBuilderUtil.ConvertToBoolean(value); break; case Keywords.SkipDeletedRecords: SkipDeletedRecords = DbfDbConnectionStringBuilderUtil.ConvertToBoolean(value); break; @@ -74,12 +73,12 @@ public override object this[string keyword] } } - public Encoding Encoding + public string Encoding { get => _encoding; set { - SetEncodingValue(value); + SetValue(DbfDbConnectionStringKeywords.Encoding, value); _encoding = value; } } @@ -165,11 +164,6 @@ private void SetValue(string keyword, string value) base[keyword] = value; } - private void SetEncodingValue(Encoding value) - { - base[DbfDbConnectionStringKeywords.Encoding] = DbfDbConnectionStringBuilderUtil.EncodingToString(value); - } - private void SetStringTrimmingValue(StringTrimmingOption value) { Debug.Assert(DbfDbConnectionStringBuilderUtil.IsValidStringTrimmingOptionValue(value), "Invalid value for StringTrimming"); @@ -206,7 +200,7 @@ private void Reset(Keywords index) switch(index) { case Keywords.Encoding: - _encoding = null; + _encoding = string.Empty; break; case Keywords.Folder: _folder = string.Empty; diff --git a/test/DbfDataReader.Tests/DbfDbConnectionStringBuilderTests.cs b/test/DbfDataReader.Tests/DbfDbConnectionStringBuilderTests.cs index d15d4f1..cba4428 100644 --- a/test/DbfDataReader.Tests/DbfDbConnectionStringBuilderTests.cs +++ b/test/DbfDataReader.Tests/DbfDbConnectionStringBuilderTests.cs @@ -33,7 +33,7 @@ public void Should_parse_encoding() var builder = new DbfDbConnectionStringBuilder(connectionString); // Assert - builder.Encoding.ShouldBe(Encoding.GetEncoding(encoding)); + builder.Encoding.ShouldBe(encoding); } [Fact] diff --git a/test/DbfDataReader.Tests/DbfDbConnectionTests.cs b/test/DbfDataReader.Tests/DbfDbConnectionTests.cs index 16c7485..e7aaf97 100644 --- a/test/DbfDataReader.Tests/DbfDbConnectionTests.cs +++ b/test/DbfDataReader.Tests/DbfDbConnectionTests.cs @@ -13,7 +13,7 @@ public class DbfDbConnectionTests public async Task Should_read_all_rows() { var dbConnection = new DbfDbConnection(); - dbConnection.ConnectionString = $"Folder={FolderPath};SkipDeletedRecords=false"; + dbConnection.ConnectionString = $"Folder={FolderPath};Encoding=ascii;SkipDeletedRecords=false"; dbConnection.Open(); var dbCommand = dbConnection.CreateCommand(); @@ -36,7 +36,7 @@ public async Task Should_read_all_rows() public async Task Should_skip_deleted_rows() { var dbConnection = new DbfDbConnection(); - dbConnection.ConnectionString = $"Folder={FolderPath};SkipDeletedRecords=true"; + dbConnection.ConnectionString = $"Folder={FolderPath};Encoding=ascii;SkipDeletedRecords=true"; dbConnection.Open(); var dbCommand = dbConnection.CreateCommand();