function Utf8ToUnicode(strUtf8)
{
var bstr = "";
var nTotalChars = strUtf8.length; // total chars to be processed.
var nOffset = 0; // processing point on strUtf8
var nRemainingBytes = nTotalChars; // how many bytes left to be converted
var nOutputPosition = 0;
var iCode, iCode1, iCode2; // the value of the unicode.
while (nOffset < nTotalChars)
{
iCode = strUtf8.charCodeAt(nOffset);
if ((iCode & 0x80) == 0) // 1 byte.
{
if ( nRemainingBytes < 1 ) // not enough data
break;
bstr += String.fromCharCode(iCode & 0x7F);
nOffset ++;
nRemainingBytes -= 1;
}
else if ((iCode & 0xE0) == 0xC0) // 2 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
if ( nRemainingBytes < 2 ¦ ¦ // not enough data
(iCode1 & 0xC0) != 0x80 ) // invalid pattern
{
break;
}
bstr += String.fromCharCode(((iCode & 0x3F) < < 6) ¦ ( iCode1 & 0x3F));
nOffset += 2;
nRemainingBytes -= 2;
}
else if ((iCode & 0xF0) == 0xE0) // 3 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
iCode2 = strUtf8.charCodeAt(nOffset + 2);
if ( nRemainingBytes < 3 ¦ ¦ // not enough data
(iCode1 & 0xC0) != 0x80 ¦ ¦ // invalid pattern
(iCode2 & 0xC0) != 0x80 )
{
break;
}
bstr += String.fromCharCode(((iCode & 0x0F) < < 12) ¦
((iCode1 & 0x3F) < < 6) ¦
(iCode2 & 0x3F));
nOffset += 3;
nRemainingBytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nRemainingBytes != 0)
{
// bad UTF8 string.
return "";
}
return bstr;
}
但是转了之后我再用alert语句打印的时候,发现是空的,连乱码都没有了,请问是什么原因呀???
8 个解决方案
#1
你的代码太乱了,能不能整理一下
#2
就是把代码那部分用code标注起来
function Utf8ToUnicode(strUtf8)
{
var bstr = "";
var nTotalChars = strUtf8.length; // total chars to be processed.
var nOffset = 0; // processing point on strUtf8
var nRemainingBytes = nTotalChars; // how many bytes left to be converted
var nOutputPosition = 0;
var iCode, iCode1, iCode2; // the value of the unicode.
while (nOffset < nTotalChars)
{
iCode = strUtf8.charCodeAt(nOffset);
if ((iCode & 0x80) == 0) // 1 byte.
{
if ( nRemainingBytes < 1 ) // not enough data
break;
bstr += String.fromCharCode(iCode & 0x7F);
nOffset ++;
nRemainingBytes -= 1;
}
else if ((iCode & 0xE0) == 0xC0) // 2 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
if ( nRemainingBytes < 2 | | // not enough data
(iCode1 & 0xC0) != 0x80 ) // invalid pattern
{
break;
}
bstr += String.fromCharCode(((iCode & 0x3F) < < 6) | ( iCode1 & 0x3F));
nOffset += 2;
nRemainingBytes -= 2;
}
else if ((iCode & 0xF0) == 0xE0) // 3 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
iCode2 = strUtf8.charCodeAt(nOffset + 2);
if ( nRemainingBytes < 3 | | // not enough data
(iCode1 & 0xC0) != 0x80 | | // invalid pattern
(iCode2 & 0xC0) != 0x80 )
{
break;
}
bstr += String.fromCharCode(((iCode & 0x0F) < < 12) |
((iCode1 & 0x3F) < < 6) |
(iCode2 & 0x3F));
nOffset += 3;
nRemainingBytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nRemainingBytes != 0)
{
// bad UTF8 string.
return "";
}
return bstr;
}
#3
整理后看了一下代码,你用Utf8ToUnicode这个方法作什么?
把utf8转为unicode来整理乱码吗
在java的Sting中有一个
就可以转换字符集,得到中文
把utf8转为unicode来整理乱码吗
在java的Sting中有一个
String s = "你好";
String str = new String(s.getBytes("ISO-8859-1"),"GBK");
System.out.println(str);
就可以转换字符集,得到中文
#4
同意楼上 在服务端用String str = new String(s.getBytes("ISO-8859-1"),"GBK");
转化后返回给页面
转化后返回给页面
#5
不行的呀,我从服务器端生成GBK后,可以用ajax传过来的时候是不行的,我现在就是要在客户端把它转成GBK。
#6
上面这个方法是不对的,有没有别的方法呀
#7
修改你的<script>, <script type="text/javascript" charset="GBK">或者<script type="text/javascript" charset="UTF-8">试一下.
#8
在script里面我能得到正确的信息,可是把UTF-8格式的文字放到GBK的页面上就不行了呀,现在就是要在javascript里面把UTF-8转成GBK。
#1
你的代码太乱了,能不能整理一下
#2
就是把代码那部分用code标注起来
function Utf8ToUnicode(strUtf8)
{
var bstr = "";
var nTotalChars = strUtf8.length; // total chars to be processed.
var nOffset = 0; // processing point on strUtf8
var nRemainingBytes = nTotalChars; // how many bytes left to be converted
var nOutputPosition = 0;
var iCode, iCode1, iCode2; // the value of the unicode.
while (nOffset < nTotalChars)
{
iCode = strUtf8.charCodeAt(nOffset);
if ((iCode & 0x80) == 0) // 1 byte.
{
if ( nRemainingBytes < 1 ) // not enough data
break;
bstr += String.fromCharCode(iCode & 0x7F);
nOffset ++;
nRemainingBytes -= 1;
}
else if ((iCode & 0xE0) == 0xC0) // 2 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
if ( nRemainingBytes < 2 | | // not enough data
(iCode1 & 0xC0) != 0x80 ) // invalid pattern
{
break;
}
bstr += String.fromCharCode(((iCode & 0x3F) < < 6) | ( iCode1 & 0x3F));
nOffset += 2;
nRemainingBytes -= 2;
}
else if ((iCode & 0xF0) == 0xE0) // 3 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
iCode2 = strUtf8.charCodeAt(nOffset + 2);
if ( nRemainingBytes < 3 | | // not enough data
(iCode1 & 0xC0) != 0x80 | | // invalid pattern
(iCode2 & 0xC0) != 0x80 )
{
break;
}
bstr += String.fromCharCode(((iCode & 0x0F) < < 12) |
((iCode1 & 0x3F) < < 6) |
(iCode2 & 0x3F));
nOffset += 3;
nRemainingBytes -= 3;
}
else // 4 or more bytes -- unsupported
break;
}
if (nRemainingBytes != 0)
{
// bad UTF8 string.
return "";
}
return bstr;
}
#3
整理后看了一下代码,你用Utf8ToUnicode这个方法作什么?
把utf8转为unicode来整理乱码吗
在java的Sting中有一个
就可以转换字符集,得到中文
把utf8转为unicode来整理乱码吗
在java的Sting中有一个
String s = "你好";
String str = new String(s.getBytes("ISO-8859-1"),"GBK");
System.out.println(str);
就可以转换字符集,得到中文
#4
同意楼上 在服务端用String str = new String(s.getBytes("ISO-8859-1"),"GBK");
转化后返回给页面
转化后返回给页面
#5
不行的呀,我从服务器端生成GBK后,可以用ajax传过来的时候是不行的,我现在就是要在客户端把它转成GBK。
#6
上面这个方法是不对的,有没有别的方法呀
#7
修改你的<script>, <script type="text/javascript" charset="GBK">或者<script type="text/javascript" charset="UTF-8">试一下.
#8
在script里面我能得到正确的信息,可是把UTF-8格式的文字放到GBK的页面上就不行了呀,现在就是要在javascript里面把UTF-8转成GBK。