문자열은 UTF-8 일 것입니다. "문자"와 "바이트"는 같은 것이 아닙니다. std::string
클래스는 "문자"가 각각 1 바이트라고 가정하므로 결과가 잘못되었습니다.
옵션은 대신에, 당신은 (일반적으로) 문자가 모두 두 바이트 (A wchar_t
또는 short
)가 있다고 가정 할 수있는 각 wstring
를 UTF-16 문자열을 변환하여 사용할 수 있습니다, 또는 당신은 ICU 같은 라이브러리를 사용할 수 있습니다 또는 UTF8-CPP이 UTF-8 문자열을 직접 조작하여 "3 번째 바이트 얻기"보다는 "3 번째 문자 얻기"와 같은 일을합니다.
최소형으로 가고 싶다면 UTF-8 문자열 길이 함수 중 하나의 내부를 다시 사용하여 특정 문자의 바이트 오프셋과 길이를 얻는 간단한 함수를 코딩 할 수 있습니다 위에 나열된 라이브러리 중 하나 또는 google에서 가져 왔습니다. 기본적으로 각 캐릭터를 검사하고 앞으로 1-3 바이트를 뛰어 넘어 어떤 비트가 설정되어 있는지에 따라 다음 문자의 시작 부분으로 이동해야합니다.
for($i = 0; $i < strlen($str); $i++) {
$value = ord($str[$i]);
if($value > 127) {
if($value >= 192 && $value <= 223)
$i++;
elseif($value >= 224 && $value <= 239)
$i = $i + 2;
elseif($value >= 240 && $value <= 247)
$i = $i + 3;
else
die('Not a UTF-8 compatible string');
}
$count++;
}
http://www.php.net/manual/en/function.strlen.php#25715
그리고'표준 : wcout' :
여기 쉽게 PHP에서 번역 될 수있는 하나 – GManNickG