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? 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 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; } } }