CsvFieldIndexer: Fix calculation of offsets with unicode characters.

Fixes #4
This commit is contained in:
2023-08-18 15:47:09 +02:00
parent fb6d8d76a1
commit 6ed9718abb
4 changed files with 79 additions and 17 deletions

View File

@@ -1,4 +1,3 @@
using System;
using System.IO;
using System.Text;
@@ -10,15 +9,29 @@ namespace CsvLib
private int _position;
private readonly StringBuilder _sbBuffer = new StringBuilder();
private readonly Encoding _currentEncoding = Encoding.Default;
public BufferedTextReader(TextReader baseReader)
{
_baseReader = baseReader;
if (baseReader is StreamReader streamReader)
{
_currentEncoding = streamReader.CurrentEncoding;
}
}
public override int Read()
{
_position++;
int read = _baseReader.Read();
if (read > 127)
{
int count = _currentEncoding.GetByteCount(((char)read).ToString());
_position += count;
}
else
{
_position++;
}
if (read != -1)
{
_sbBuffer.Append((char)read);
@@ -26,11 +39,6 @@ namespace CsvLib
return read;
}
public override int Read(char[] buffer, int index, int count)
{
throw new NotImplementedException("Read buffered method on BufferedTextReader");
}
public override int Peek()
{
return _baseReader.Peek();