> 웹 프론트엔드 > JS 튜토리얼 > JS에서 한자가 글자가 깨져 보이는 문제를 완벽하게 해결(해결)_기본지식

JS에서 한자가 글자가 깨져 보이는 문제를 완벽하게 해결(해결)_기본지식

PHP中文网
풀어 주다: 2017-04-01 16:42:40
원래의
1696명이 탐색했습니다.

언급한 대로 몇 가지 토론을 읽다가 갑자기 최근 연구하고 있는 문제를 게시해야겠다는 생각이 들었습니다. 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一碰上中文就变得很不稳定=_=&#39;  
//Dec. 29th 2005 created by shouhaimu(QQ:30836570)  
function myjs(i)  
{  
    var t="<html>\n";  
    t+="<head>\n";  
    t+="<meta http-equiv=&#39;Content-Type&#39; content=&#39;text/html; charset=gb2312&#39;>\n";  
    t+="<script language=&#39;JavaScript&#39; src=&#39;1.js&#39;></script>\n";  
    t+="</head>\n";  
    t+="<body>\n";  
    t+="<input type=button 
onclick
=myjs("+(i+1)+" value=&#39;这是演示程序,已经运行了"+i+"次!&#39;>\n";  
//上面这行如果改成下面这句就可以正常显示,看来确实是JS对汉字的支持不够好:  
//t+="<input type=button onclick=myjs("+(i+1)+" value=&#39;This is my code,it has run "+i+" 
time
s!&#39;>\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의 특정 크기는 캐시 및 메모리 크기. 간단히 말해서, 중국어 지원 정도를 따진다면 JSASP정적이므로 당연히 가장 안정적입니다. 그렇지 않은 경우 클라이언트에서 실행해야 하며 ASP를 사용하여 코드를 생성하는 것이 좋습니다. 위의 내용은 JS에서 한자가 깨져 표시되는 문제에 대한 완벽한 해결 방법입니다(해결됨)_기본 지식에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요. )!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿