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 코드 가 깔끔 하지 않 나 요?
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.