58 lines
1.5 KiB
C#
58 lines
1.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Gma.QrCodeNet.Encoding.DataEncodation.InputRecognition;
|
|
|
|
public static class InputRecognise
|
|
{
|
|
public static RecognitionStruct Recognise(string content)
|
|
{
|
|
string encodingName = EightBitByteRecognision(content, 0, content.Length);
|
|
return new RecognitionStruct(encodingName);
|
|
}
|
|
|
|
private static string EightBitByteRecognision(string content, int startPos, int contentLength)
|
|
{
|
|
if(string.IsNullOrEmpty(content))
|
|
throw new ArgumentNullException(nameof(content));
|
|
|
|
var eciSets = new ECISet(ECISet.AppendOption.NameToValue);
|
|
|
|
Dictionary<string, int>? eciSet = eciSets.GetECITable();
|
|
|
|
if(eciSet == null)
|
|
return string.Empty;
|
|
|
|
// we will not check for utf8 encoding.
|
|
eciSet.Remove(QRCodeConstantVariable.UTF8Encoding);
|
|
eciSet.Remove(QRCodeConstantVariable.DefaultEncoding);
|
|
|
|
int scanPos = startPos;
|
|
|
|
// default encoding as priority
|
|
scanPos = ModeEncodeCheck.TryEncodeEightBitByte(content, QRCodeConstantVariable.DefaultEncoding, scanPos, contentLength);
|
|
if (scanPos == -1)
|
|
{
|
|
return QRCodeConstantVariable.DefaultEncoding;
|
|
}
|
|
|
|
foreach (KeyValuePair<string, int> kvp in eciSet)
|
|
{
|
|
scanPos = ModeEncodeCheck.TryEncodeEightBitByte(content, kvp.Key, scanPos, contentLength);
|
|
if (scanPos == -1)
|
|
{
|
|
return kvp.Key;
|
|
}
|
|
}
|
|
|
|
if (scanPos == -1)
|
|
{
|
|
throw new ArgumentException("foreach Loop check give wrong result.");
|
|
}
|
|
else
|
|
{
|
|
return QRCodeConstantVariable.UTF8Encoding;
|
|
}
|
|
}
|
|
}
|