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 算力,解读结果公开显示在下面。

还没有人解读过这个文件。