서비스 사용자에게서 개발 요청사항이 들어왔다. 우리 앱에서는 로그인한 아이디의 그룹웨어로 상대방에게 메일을 보내는 기능이 있는데, 일부 그룹웨어 메일이 없는 사람들이 메일기능을 사용할 수가 없어 불편함을 겪고 있다는 것이다. 회사 보안가이드 상 외부 메일을 사용할 수 없기 때문에 SMS문자를 보내는 기능을 개발하기로 하였다.
문자를 보내는 것은 이미 OTP인증 기능을 개발하며, 시스템을 갖추어 놨는데 이번에는 사용자가 내용을 입력을 할 수 있기 때문에 최대 가능 문자용량인 80Byte를 넘지 않도록 해야 했다. 서비스 사용자가 중국, 한국, 베트남 등 다양한 언어를 사용하기 때문에 이를 고려해서 Byte에 제한을 두는 방법을 생각해보았다.
우선 문자 내용이 제한에 의해 잘려도 크게 문제가 되지는 않는내용이기 때문에 앞단에서는 따로 유효성 검사를 하지 않고, 뒷단에서 초과되는 만큼의 내용의 마지막을 잘라주기로 했다.
string TruncateToByteLimit(string text, int byteLimit)
{
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("UTF-8");
int byteCount = 0;
var result = new System.Text.StringBuilder();
bool isCutted = false;
foreach (char c in text)
{
int charSize = encoding.GetByteCount(new char[] { c });
if (byteCount + charSize > byteLimit)
{
isCutted = true;
break;
}
result.Append(c);
byteCount += charSize;
}
if (isCutted) result.Append("...");
return result.ToString();
}
이를 해결하기 위해 위 함수를 작성하여 보았다. text는 문자내용, byteLimit은 최대 제한 크기로 인자를 넘겨주었다.
문자열을 순회하며 각 char의 크기를 구하고(한글 2Byte / 영어, 한자 1Byte), 크기가 최대제한을 초과할경우 문자열을 잘라주고 ...을 넣어 문자열의 잘림을 표현했다.
구현 끝
'C#' 카테고리의 다른 글
[C#] IOException: Sharing violation on path 에러 해결 (0) | 2024.08.22 |
---|---|
[C#] InstallUtil.exe로 Windows Service 설치 시 에러 (0) | 2023.12.22 |
[C#,MSSQL] The timeout period elapsed prior to obtaining a connection from the pool 에러 해결 (1) | 2023.11.19 |
[SOAP,C#] SOAP 통신 하는법 (0) | 2023.11.03 |