Skip to content

Commit 41ded65

Browse files
Refactor encoding handling in DbfDbConnection and DbfDbConnectionStringBuilder (#263)
1 parent 37e5a5a commit 41ded65

File tree

5 files changed

+13
-17
lines changed

5 files changed

+13
-17
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,8 @@ The connection string supports the options available in `DbfDataReaderOptions`:
131131
- Encoding - the encoding to be used
132132
- optional
133133
- string
134-
- valid Encoding name from [Encoding](https://learn.microsoft.com/en-us/dotnet/api/System.Text.Encoding)
134+
- defaults to null and uses the language from the DBF header
135+
- valid Encoding web name from [Encoding](https://learn.microsoft.com/en-us/dotnet/api/System.Text.Encoding) e.g. 'ascii'
135136
- ReadFloatsAsDecimals - whether to read floats as decimals
136137
- optional
137138
- boolean

src/DbfDataReader/DbfDbConnection.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Data;
33
using System.Data.Common;
44
using System.IO;
5+
using System.Text;
56

67
namespace DbfDataReader
78
{
@@ -54,9 +55,9 @@ public override void Open()
5455

5556
var options = new DbfDataReaderOptions();
5657

57-
if (builder.Encoding is var encoding)
58+
if (builder.Encoding is { } encoding)
5859
{
59-
options.Encoding = encoding;
60+
options.Encoding = Encoding.GetEncoding(encoding);
6061
}
6162

6263
if (builder.ReadFloatsAsDecimals is var readFloatsAsDecimals)

src/DbfDataReader/DbfDbConnectionStringBuilder.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Collections.Generic;
33
using System.Data.Common;
44
using System.Diagnostics;
5-
using System.Text;
65

76
namespace DbfDataReader
87
{
@@ -25,7 +24,7 @@ private enum Keywords
2524
private static readonly string[] ValidKeywords = BuildValidKeywords();
2625
private static readonly Dictionary<string,Keywords> KeywordsHash = BuildKeywordsHash();
2726

28-
private Encoding _encoding;
27+
private string _encoding;
2928
private string _folder = string.Empty;
3029
private bool _readFloatsAsDecimals;
3130
private bool _skipDeletedRecords = true;
@@ -57,7 +56,7 @@ public override object this[string keyword]
5756
Keywords index = GetIndex(keyword);
5857
switch (index)
5958
{
60-
case Keywords.Encoding: Encoding = DbfDbConnectionStringBuilderUtil.ConvertToEncoding(keyword, value); break;
59+
case Keywords.Encoding: Encoding = DbfDbConnectionStringBuilderUtil.ConvertToString(value); break;
6160
case Keywords.Folder: Folder = DbfDbConnectionStringBuilderUtil.ConvertToString(value); break;
6261
case Keywords.ReadFloatsAsDecimals: ReadFloatsAsDecimals = DbfDbConnectionStringBuilderUtil.ConvertToBoolean(value); break;
6362
case Keywords.SkipDeletedRecords: SkipDeletedRecords = DbfDbConnectionStringBuilderUtil.ConvertToBoolean(value); break;
@@ -74,12 +73,12 @@ public override object this[string keyword]
7473
}
7574
}
7675

77-
public Encoding Encoding
76+
public string Encoding
7877
{
7978
get => _encoding;
8079
set
8180
{
82-
SetEncodingValue(value);
81+
SetValue(DbfDbConnectionStringKeywords.Encoding, value);
8382
_encoding = value;
8483
}
8584
}
@@ -165,11 +164,6 @@ private void SetValue(string keyword, string value)
165164
base[keyword] = value;
166165
}
167166

168-
private void SetEncodingValue(Encoding value)
169-
{
170-
base[DbfDbConnectionStringKeywords.Encoding] = DbfDbConnectionStringBuilderUtil.EncodingToString(value);
171-
}
172-
173167
private void SetStringTrimmingValue(StringTrimmingOption value)
174168
{
175169
Debug.Assert(DbfDbConnectionStringBuilderUtil.IsValidStringTrimmingOptionValue(value), "Invalid value for StringTrimming");
@@ -206,7 +200,7 @@ private void Reset(Keywords index)
206200
switch(index)
207201
{
208202
case Keywords.Encoding:
209-
_encoding = null;
203+
_encoding = string.Empty;
210204
break;
211205
case Keywords.Folder:
212206
_folder = string.Empty;

test/DbfDataReader.Tests/DbfDbConnectionStringBuilderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void Should_parse_encoding()
3333
var builder = new DbfDbConnectionStringBuilder(connectionString);
3434

3535
// Assert
36-
builder.Encoding.ShouldBe(Encoding.GetEncoding(encoding));
36+
builder.Encoding.ShouldBe(encoding);
3737
}
3838

3939
[Fact]

test/DbfDataReader.Tests/DbfDbConnectionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class DbfDbConnectionTests
1313
public async Task Should_read_all_rows()
1414
{
1515
var dbConnection = new DbfDbConnection();
16-
dbConnection.ConnectionString = $"Folder={FolderPath};SkipDeletedRecords=false";
16+
dbConnection.ConnectionString = $"Folder={FolderPath};Encoding=ascii;SkipDeletedRecords=false";
1717
dbConnection.Open();
1818

1919
var dbCommand = dbConnection.CreateCommand();
@@ -36,7 +36,7 @@ public async Task Should_read_all_rows()
3636
public async Task Should_skip_deleted_rows()
3737
{
3838
var dbConnection = new DbfDbConnection();
39-
dbConnection.ConnectionString = $"Folder={FolderPath};SkipDeletedRecords=true";
39+
dbConnection.ConnectionString = $"Folder={FolderPath};Encoding=ascii;SkipDeletedRecords=true";
4040
dbConnection.Open();
4141

4242
var dbCommand = dbConnection.CreateCommand();

0 commit comments

Comments
 (0)