C\#(.net)에서 바이트 수 에 따라 문자열 을 캡 처 하면 마지막 에 난 코드 문제 가 해 결 됩 니 다.

머리말
최근 에는 바이트 수 에 따라 문자열 을 캡 처 해 야 합 니 다.인터넷 에서 많은 방법 을 찾 았 다.
Encoding.Default.GetString 이 사용 하 는 Default
Encoding.UTF 8.GetBytes 는 utf-8 인 코딩 을 사용 합 니 다.이러 면 당연히 난 장 판이 지.특히 중국어 가 나 올 때.
이런 데이터 처 리 는 당연히 통 일 된 인 코딩 으로 처리 해 야 한다.다음은 더 이상 할 말 이 없 으 니 상세 한 소 개 를 살 펴 봅 시다.
예:1

 string msg= Encoding.UTF8.GetString(Encoding.UTF8.GetBytes(strcode)); 
예:2

string strcode="    ";
byte[] buffer=Encoding.UTF8.GetBytes(strcode);
string msg= Encoding.UTF8.GetString(buffer,0,buffer.Length);
실제 결 과 는 캡 처 의 끝 에 난 장 판이 생 길 수 있다 는 것 이다.마지막 문자 가 여러 바이트 로 불완전 하 게 캡 처 되 었 기 때문이다.
개 선 된 방법 은 다음 과 같다.

/// <summary>
 ///             ( SubString  )
 /// </summary>
 /// <param name="source">       (  )</param>
 /// <param name="NumberOfBytes">       </param>
 /// <param name="encoding">System.Text.Encoding</param>
 /// <param name="suffix">        (          )</param>
 /// <returns></returns>
 public static string SubStringByBytes(string source, int NumberOfBytes, System.Text.Encoding encoding, string suffix = "...")
 {
  if(string.IsNullOrWhiteSpace(source) || source.Length == 0)
  return source;

  if(encoding.GetBytes(source).Length <= NumberOfBytes)
  return source;

  long tempLen = 0;
  StringBuilder sb = new StringBuilder();
  foreach(var c in source)
  {
  Char[] _charArr = new Char[] { c };
  byte[] _charBytes = encoding.GetBytes(_charArr);
  if((tempLen + _charBytes.Length) > NumberOfBytes)
  {
   if(!string.IsNullOrWhiteSpace(suffix))
   sb.Append(suffix);
   break;
  }
  else
  {
   tempLen += _charBytes.Length;
   sb.Append(encoding.GetString(_charBytes));
  }
  }
  return sb.ToString();
 }
 /// <summary>
 ///             ( SubString  )
 /// </summary>
 /// <param name="source">       (  )</param>
 /// <param name="NumberOfBytes">       </param>
 /// <param name="encoding">UTF-8,Unicode,GB2312...</param>
 /// <param name="suffix">        (          )</param>
 /// <returns></returns>
 public static string SubStringByBytes(string source, int NumberOfBytes, string encoding = "UTF-8", string suffix = "...")
 {
  return SubStringByBytes(source, NumberOfBytes, Encoding.GetEncoding(encoding), suffix);
 }
원 리 는 간단 하 다.자 르 기 전에 문자 가 바이트 길 이 를 초과 하 는 지,초과 하면 전체 문 자 를 버 리 는 것 이다.
JavaScript 에 있 는 Blob 대상 은 바이트 길 이 를 쉽게 가 져 옵 니 다:var len=new Blob([문자열']).size;
JS 코드 가 깔끔 하지 않 나 요?
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기