언급한 대로 몇 가지 토론을 읽다가 갑자기 최근 연구하고 있는 문제를 게시해야겠다는 생각이 들었습니다. JS의 문자 깨짐과 관련된 모든 문제를 여기에 게시하여 함께 공부할 수 있도록 했습니다. . :)
시나리오 1: write로 작성된 내용이 UTF-8 형식입니다. 저장된 쓰기 데이터에 UTF-8로 인코딩되지 않은 중국어가 포함되어 있는 경우 쓰기를 두 번 이상 중첩하면 문자가 깨질 수 있습니다. 준비된 파일이 없어서 그냥 임시로 만들어 봤습니다. 1.htm 페이지의 코드는 다음과 같습니다.
코드는 다음과 같습니다.
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script language="JavaScript" src="1.js"></script> </head> <body onload=myjs(1)> </body> </html>
인용문의 1.js 파일 코드입니다. 두 파일 모두 utf-8이 아닌 중국어 간체로 저장되어 있습니다.
코드는 다음과 같습니다.
//这是JS 递归 自写过程中汉字乱码的演示程序 //不光是中文内容不行,就连 注释 如果是中文有时候也不行 //感觉JS一碰上中文就变得很不稳定=_=' //Dec. 29th 2005 created by shouhaimu(QQ:30836570) function myjs(i) { var t="<html>\n"; t+="<head>\n"; t+="<meta http-equiv='Content-Type' content='text/html; charset=gb2312'>\n"; t+="<script language='JavaScript' src='1.js'></script>\n"; t+="</head>\n"; t+="<body>\n"; t+="<input type=button onclick =myjs("+(i+1)+" value='这是演示程序,已经运行了"+i+"次!'>\n"; //上面这行如果改成下面这句就可以正常显示,看来确实是JS对汉字的支持不够好: //t+="<input type=button onclick=myjs("+(i+1)+" value='This is my code,it has run "+i+" time s!'>\n"; t+="</body>\n"; t+="</html>\n"; document .open(); document.write(t); document.close(); }
2회 이상 실행됩니다. 문자가 깨져 있습니다.
시나리오 2: XMLHTTP를 통해 파일을 얻어서 출력할 때 파일에 중국어 정보가 포함되어 있고 gb로 인코딩된 경우 중국어 정보가 깨져서 표시됩니다.
js 코드는 다음과 같습니다. (댓글은 게시할 때 추가한 것입니다. 간섭이 두렵다면 삭제해도 됩니다.)
코드는 다음과 같습니다.
<SCRIPT language="JavaScript" type="text/JavaScript"> self.onerror= null ; var Http = new ActiveX Object ("Microsoft.XMLHTTP"; Http.open("GET",URL,false); //URL是您需要获取的页面的网址 Http.s end (); document.write(Http.responseText); </SCRIPT> 后来用VBS解决,改成如下: <SCRIPT language=" VBScript " type="text/VBScript"> Function bytes2BSTR(vIn) str Return = "" For i = 1 To LenB(vIn) ThisCharCode = AscB(MidB(vIn,i,1)) If ThisCharCode < &H80 Then strReturn = strReturn & Chr (ThisCharCode) Else Next CharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) i = i + 1 End If Next bytes2BSTR = strReturn End Function set Http = CreateObject("Microsoft.XMLHTTP" Http.open "Get",URL,false //URL是您需要获取的页面的网址 Http.send "" document.write(bytes2BSTR(Http.responseBody)) </SCRIPT>
참고: 위의 bytes2BSTR만 responseBody 작업이 가능하지만 responseText 작업은 기본 인코딩에 따라 시스템에서 처리되기 때문에 정상적으로 표시될 수 없습니다. 하지만 이렇게 하면 중국어 간체 파일을 읽을 수 있지만 UTF-8을 읽을 때 오류가 발생합니다.
JS 실행 시 한자가 깨져 나오는 문제에 대한 논의(편집 시 발생하는 문제는 다른 특집을 참고해주세요)
그 중 일부에 대해 듣고 테스트를 해봤습니다. 풀리지 않는 핵심 미스터리 :
1. 페이지가 정상적으로 표시되더라도 utf-8이 아닌 페이지를 읽으면 더 이상 정상적으로 표시되지 않습니다. 🎜>2. 모든 보호 조치를 취하더라도 문자 깨짐에 대한 모든 조치(물론 재인코딩 제외)가 적용되었으며 동일한 프로그램을 사용하여 페이지를 열어도 문제가 발생한다는 보장은 없습니다. 페이지는 매번 중국어로 안정적으로 표시됩니다.
3. 데이터 제출의 원격 획득 양식의 문제는 대상 웹사이트가 인코딩 및 디코딩을 사용하는 경우 표시가 정상이라면 제출된 콘텐츠는 왜곡될 수 있으며 그 반대의 경우도 마찬가지입니다. 그래서 미리 얻은 내용을 전부 다시 인코딩해야 해서 인코딩 프로그램 없이는 할 수 없었고, VBS의 그림자도 없앨 수 없었다 =_='
저도 찾았습니다 방금 테스트에 문제가 있습니다
이전에 게시된 VBS 재인코딩
기능
, 페이지가 너무 크면 IE의 특정 크기는 캐시 및 메모리 크기. 간단히 말해서, 중국어 지원 정도를 따진다면 JS