function Utf8ToUnicode(strUtf8){var bstr = “”;var nTotalChars = strUtf8.length; // 処理される合計文字数var nOffset = 0; // strUtf8var の処理ポイント nRemainingBytes = nTotalChars; // 変換される残りのバイト数var nOutputPosition = 0;var iCode, iCode1, iCode2; // Unicode の値。 while (nOffset < nTotalChars){iCode = strUtf8.charCodeAt(nOffset);if ((iCode & 0×80) == 0 ) // 1 byte.{if ( nRemainingBytes < 1 ) // データが足りませんbreak; bstr += String.fromCharCode(iCode & 0×7F); nOffset ++; nRemainingBytes -= 1; } else if ((iCode & 0xE0) == 0xC0) // 2 バイト { iCode1 = strUtf8.charCodeAt(nOffset + 1); if ( nRemainingBytes (iCode1 & 0xC0) != 0×80 ) // 無効なパターン { break; } bstr += String.fromCharCode(((iCode & 0×3F) << 6) | ( iCode1 & 0×3F)); nOffset += 2; nRemainingBytes -= 2; } else if ((iCode & 0xF0) == 0xE0) // 3 bytes { iCode1 = strUtf8.charCodeAt(nOffset + 1); iCode2 = strUtf8.charCodeAt(nOffset + 2); if ( nRemainingBytes (iCode1 & 0xC0) != 0 ×80 || // 無効なパターン (iCode2 & 0xC0) != 0×80 ) { break; } bstr += String.fromCharCode(((iCode & 0× 0F) ((iCode1 & 0×3F) (iCode2 & 0×3F)); nOffset += 3; nRemainingBytes -= 3; } else // 4 バイト以上 — サポートされていません break; } < p>if (nRemainingBytes != 0) { // 不正な UTF8 文字列。 return ""; } return bstr; } ?> 复制代