ClassLibraryWeiBao/QR二维码/DataEncodation/InputRecognition/InputRecognise.cs
(开头部分) 2KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using Gma.QrCodeNet.Encoding.Versions;
namespace Gma.QrCodeNet.Encoding.DataEncodation.InputRecognition
{
public static class InputRecognise
{
/// <summary>
/// Use to recognise which mode and encoding name to use for input string.
/// </summary>
/// <param name="content">input string content</param>
/// <param name="encodingName">Output encoding name</param>
/// <returns>Mode and Encoding name</returns>
public static RecognitionStruct Recognise(string content)
{
int contentLength = content.Length;
int tryEncodePos = ModeEncodeCheck.TryEncodeKanji(content, contentLength);
if(tryEncodePos == -2)
return new RecognitionStruct(Mode.EightBitByte, QRCodeConstantVariable.UTF8Encoding);
else if(tryEncodePos == -1)
return new RecognitionStruct(Mode.Kanji, QRCodeConstantVariable.DefaultEncoding);
tryEncodePos = ModeEncodeCheck.TryEncodeAlphaNum(content, 0, contentLength);
if(tryEncodePos == -2)
return new RecognitionStruct(Mode.Numeric, QRCodeConstantVariable.DefaultEncoding);
else if(tryEncodePos == -1)
return new RecognitionStruct(Mode.Alphanumeric, QRCodeConstantVariable.DefaultEncoding);
string encodingName = EightBitByteRecognision(content, tryEncodePos, contentLength);
return new RecognitionStruct(Mode.EightBitByte, encodingName);
}
private static string EightBitByteRecognision(string content, int startPos, int contentLength)
{
if(string.IsNullOrEmpty(content))
throw new ArgumentNullException("content", "Input content is null or empty");
ECISet eciSets = new ECISet(ECISet.AppendOption.NameToValue);
Dictionary<string, int> eciSet = eciSets.GetECITable();
//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)
{
后面还有 17 行代码,购买后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。