latin1encoding.cs

来自「没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没的 没」· CS 代码 · 共 386 行

CS
386
字号
/* * Latin1Encoding.cs - Implementation of the *			"System.Text.Latin1Encoding" class. * * Copyright (C) 2002  Southern Storm Software, Pty Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */namespace System.Text{using System;internal class Latin1Encoding : Encoding{	// Magic number used by Windows for the ISO Latin1 code page.	internal const int ISOLATIN_CODE_PAGE = 28591;	// Constructor.	public Latin1Encoding()			: base(ISOLATIN_CODE_PAGE)			{				// Nothing to do here.			}	// Get the number of bytes needed to encode a character buffer.	public override int GetByteCount(char[] chars, int index, int count)			{				if(chars == null)				{					throw new ArgumentNullException("chars");				}				if(index < 0 || index > chars.Length)				{					throw new ArgumentOutOfRangeException						("index", _("ArgRange_Array"));				}				if(count < 0 || count > (chars.Length - index))				{					throw new ArgumentOutOfRangeException						("count", _("ArgRange_Array"));				}				return count;			}	// Convenience wrappers for "GetByteCount".	public override int GetByteCount(String s)			{				if(s == null)				{					throw new ArgumentNullException("s");				}				return s.Length;			}	// Get the bytes that result from encoding a character buffer.	public override int GetBytes(char[] chars, int charIndex, int charCount,								 byte[] bytes, int byteIndex)			{				if(chars == null)				{					throw new ArgumentNullException("chars");				}				if(bytes == null)				{					throw new ArgumentNullException("bytes");				}				if(charIndex < 0 || charIndex > chars.Length)				{					throw new ArgumentOutOfRangeException						("charIndex", _("ArgRange_Array"));				}				if(charCount < 0 || charCount > (chars.Length - charIndex))				{					throw new ArgumentOutOfRangeException						("charCount", _("ArgRange_Array"));				}				if(byteIndex < 0 || byteIndex > bytes.Length)				{					throw new ArgumentOutOfRangeException						("byteIndex", _("ArgRange_Array"));				}				if((bytes.Length - byteIndex) < charCount)				{					throw new ArgumentException						(_("Arg_InsufficientSpace"));				}				int count = charCount;				char ch;				while(count-- > 0)				{					ch = chars[charIndex++];					if(ch < (char)0x0100)					{						bytes[byteIndex++] = (byte)ch;					}					else if(ch >= '\uFF01' && ch <= '\uFF5E')					{						bytes[byteIndex++] = (byte)(ch - 0xFEE0);					}					else					{						bytes[byteIndex++] = (byte)'?';					}				}				return charCount;			}	// Convenience wrappers for "GetBytes".	public override int GetBytes(String s, int charIndex, int charCount,								 byte[] bytes, int byteIndex)			{				if(s == null)				{					throw new ArgumentNullException("s");				}				if(bytes == null)				{					throw new ArgumentNullException("bytes");				}				if(charIndex < 0 || charIndex > s.Length)				{					throw new ArgumentOutOfRangeException						("charIndex", _("ArgRange_StringIndex"));				}				if(charCount < 0 || charCount > (s.Length - charIndex))				{					throw new ArgumentOutOfRangeException						("charCount", _("ArgRange_StringRange"));				}				if(byteIndex < 0 || byteIndex > bytes.Length)				{					throw new ArgumentOutOfRangeException						("byteIndex", _("ArgRange_Array"));				}				if((bytes.Length - byteIndex) < charCount)				{					throw new ArgumentException(_("Arg_InsufficientSpace"));				}				int count = charCount;				char ch;				while(count-- > 0)				{					ch = s[charIndex++];					if(ch < (char)0x0100)					{						bytes[byteIndex++] = (byte)ch;					}					else if(ch >= '\uFF01' && ch <= '\uFF5E')					{						bytes[byteIndex++] = (byte)(ch - 0xFEE0);					}					else					{						bytes[byteIndex++] = (byte)'?';					}				}				return charCount;			}	// Get the number of characters needed to decode a byte buffer.	public override int GetCharCount(byte[] bytes, int index, int count)			{				if(bytes == null)				{					throw new ArgumentNullException("bytes");				}				if(index < 0 || index > bytes.Length)				{					throw new ArgumentOutOfRangeException						("index", _("ArgRange_Array"));				}				if(count < 0 || count > (bytes.Length - index))				{					throw new ArgumentOutOfRangeException						("count", _("ArgRange_Array"));				}				return count;			}	// Get the characters that result from decoding a byte buffer.	public override int GetChars(byte[] bytes, int byteIndex, int byteCount,								 char[] chars, int charIndex)			{				if(bytes == null)				{					throw new ArgumentNullException("bytes");				}				if(chars == null)				{					throw new ArgumentNullException("chars");				}				if(byteIndex < 0 || byteIndex > bytes.Length)				{					throw new ArgumentOutOfRangeException						("byteIndex", _("ArgRange_Array"));				}				if(byteCount < 0 || byteCount > (bytes.Length - byteIndex))				{					throw new ArgumentOutOfRangeException						("byteCount", _("ArgRange_Array"));				}				if(charIndex < 0 || charIndex > chars.Length)				{					throw new ArgumentOutOfRangeException						("charIndex", _("ArgRange_Array"));				}				if((chars.Length - charIndex) < byteCount)				{					throw new ArgumentException(_("Arg_InsufficientSpace"));				}				int count = byteCount;				while(count-- > 0)				{					chars[charIndex++] = (char)(bytes[byteIndex++]);				}				return byteCount;			}	// Get the maximum number of bytes needed to encode a	// specified number of characters.	public override int GetMaxByteCount(int charCount)			{				if(charCount < 0)				{					throw new ArgumentOutOfRangeException						("charCount", _("ArgRange_NonNegative"));				}				return charCount;			}	// Get the maximum number of characters needed to decode a	// specified number of bytes.	public override int GetMaxCharCount(int byteCount)			{				if(byteCount < 0)				{					throw new ArgumentOutOfRangeException						("byteCount", _("ArgRange_NonNegative"));				}				return byteCount;			}	// Decode a buffer of bytes into a string.	public override String GetString(byte[] bytes, int index, int count)			{				if(bytes == null)				{					throw new ArgumentNullException("bytes");				}				if(index < 0 || index > bytes.Length)				{					throw new ArgumentOutOfRangeException						("index", _("ArgRange_Array"));				}				if(count < 0 || count > (bytes.Length - index))				{					throw new ArgumentOutOfRangeException						("count", _("ArgRange_Array"));				}				if(count == 0)				{					return String.Empty;				}				String s = String.NewString(count);				int posn = 0;				while(count-- > 0)				{					s.SetChar(posn++, (char)(bytes[index++]));				}				return s;			}	public override String GetString(byte[] bytes)			{				if(bytes == null)				{					throw new ArgumentNullException("bytes");				}				if(bytes.Length == 0)				{					return String.Empty;				}				int count = bytes.Length;				int posn = 0;				String s = String.NewString(count);				while(count-- > 0)				{					s.SetChar(posn, (char)(bytes[posn]));					++posn;				}				return s;			}#if !ECMA_COMPAT	// Get the mail body name for this encoding.	public override String BodyName			{				get				{					return "iso-8859-1";				}			}	// Get the human-readable name for this encoding.	public override String EncodingName			{				get				{					return "Western European (ISO)";				}			}	// Get the mail agent header name for this encoding.	public override String HeaderName			{				get				{					return "iso-8859-1";				}			}	// Determine if this encoding can be displayed in a Web browser.	public override bool IsBrowserDisplay			{				get				{					return true;				}			}	// Determine if this encoding can be saved from a Web browser.	public override bool IsBrowserSave			{				get				{					return true;				}			}	// Determine if this encoding can be displayed in a mail/news agent.	public override bool IsMailNewsDisplay			{				get				{					return true;				}			}	// Determine if this encoding can be saved from a mail/news agent.	public override bool IsMailNewsSave			{				get				{					return true;				}			}	// Get the IANA-preferred Web name for this encoding.	public override String WebName			{				get				{					return "iso-8859-1";				}			}#endif // !ECMA_COMPAT}; // class Latin1Encoding}; // namespace System.Text

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?