::주인장  ::리눅스  ::프로그래밍  ::자유게시판 
::로그인     ::회원가입

 프로그래밍
::C,C++   ::소스   ::만든 프로그램  
C# String 한글 자를때 깨짐 방지
C# String 한글 자를때 깨짐 방지
겁나느린사람   좋아! 0   별로.. 0   2020-11-17 22:05:35
[C#] String을 자를 때 한글 깨짐 방지(Byte 형태로 자르기(EUC-KR) )

출처:https://m.blog.naver.com/PostView.nhn?blogId=myheredity&logNo=130146446519

/// <summary>문자열의 일부를 취한다. 단, 문자열의 길이는 Byte 단위이다.</summary>
/// <param name="str">문자열</param>
/// <param name="nStart">시작위치(Byte 단위, 0부터 시작)</param>
/// <param name="nLen">문자열의 길이</param>
/// <returns>문자열의 부분 문자열</returns>
/// <Example>
/// String strTxt = "123안녕하세요. 만나서 반갑습니다.";
/// int nLen = ScheduleUtil.GetStrLengthB(strTxt);
/// String strMsg = "|" + ScheduleUtil.SubStringB(strTxt, 4, 5) + "|
" // |녕하|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, 4) + "|
" // |녕|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, 3) + "|
" // |녕|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, 2) + "|
" // ||
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, 1) + "|
" // ||
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, 5) + "|
" // |안녕|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, 4) + "|
" // |안녕|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, 3) + "|
" // |안|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, 2) + "|
" // |안|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, 1) + "|
" // ||
/// + "|" + ScheduleUtil.SubStringB(strTxt, -1, strTxt.Length + 1) + "|
" // |123안녕하세요. 만나서|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 0, strTxt.Length) + "|
" // |123안녕하세요. 만나|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, strTxt.Length - 4) + "|
" // |안녕하세요. 만나|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, strTxt.Length - 7) + "|
" // |녕하세요. 만|
/// + "|" + ScheduleUtil.SubStringB(strTxt, -1, nLen + 1) + "|
" // |123안녕하세요. 만나서 반갑습니다.|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 0, nLen) + "|
" // |123안녕하세요. 만나서 반갑습니다.|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 3, nLen - 4) + "|
" // |안녕하세요. 만나서 반갑습니다|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, nLen - 7) + "|
" // |녕하세요. 만나서 반갑습니|
/// + "|" + ScheduleUtil.SubStringB(strTxt, 4, nLen - 8) + "|
"; // |녕하세요. 만나서 반갑습|
/// </Example>
static public String SubStringB(String str, int nStart, int nLen)
{
try
{
if (str != null && str != String.Empty)
{
Encoding encoding = Encoding.GetEncoding("euc-kr");
byte[] abyBuf = encoding.GetBytes(str);
int nBuf = abyBuf.Length;

if (nStart < 0)
{
nStart = 0;
}
else if (nStart > nBuf)
{
nStart = nBuf;
}

if (nLen < 0)
{
nLen = 0;
}
else if (nLen > nBuf - nStart)
{
nLen = nBuf - nStart;
}

if (nStart < nBuf)
{
int nCopyStart = 0;
int nCopyLen = 0;

// 시작 위치를 결정한다.
if (nStart >= 1)
{
while (true)
{
if (abyBuf[nCopyStart] >= 0x80)
{
nCopyStart++;
}

nCopyStart++;

if (nCopyStart >= nStart)
{
if (nCopyStart > nStart)
{
nLen--;
}

break;
}
}
}

// 길이를 결정한다.
int nI = 0;

while (nI < nLen)
{
if (abyBuf[nCopyStart + nI] >= 0x80)
{
nI++;
}

nI++;
}

nCopyLen = (nI <= nLen) ? nI : nI - 2;

if (nCopyLen >= 1)
{
return encoding.GetString(abyBuf, nCopyStart, nCopyLen);
}
}
}
}
catch (Exception ex)
{
ex.ToString();
}

return String.Empty;
}

  좋아!   별로..
 C# String 한글 자를때 깨짐 방지 다른방법
 게시물이 없습니다.