/// <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));
        }