关于 Javascript Tidy 的中文编码问题
Javascript Tidy(只支持Firefox)
来自:
http://rick.measham.id.au/paste/jstidy.htm
http://www.howtocreate.co.uk/tutorials/jsexamples/JSTidy.html
我改进了一下:
http://www.wjmhxx.com/shortway/Tools/JsTidy1.htm
http://www.wjmhxx.com/shortway/Tools/JsTidy2.htm
改进说明:
1、代码缩进;
2、//注释的保留。我的保留方法很简陋粗鄙,有更好的么?(因为我没有系统学习Javascript的)。/*...*/形式的注释尚未思考。
3、中文字符的编码问题未解决。
比如:
alert( "你好! ");
转换后成了:
alert( "\u4F60\u597D\uFF01 ");
不利于阅读。我只能在EmEditor中自编一个宏进行替换。
附 http://www.wjmhxx.com/shortway/Tools/JsTidy1.htm 源代码(因为网络问题,有时打不开):
===============================================
<HTML>
<HEAD>
<META NAME= "keywords " CONTENT= "Javascript Tidy;Js Tidy;JsTidy ">
<META HTTP-EQUIV= "Content-Type " CONTENT= "text/html; charset=utf-8 ">
<SCRIPT>
function tidy()
{
var D = document.getElementById( "A ").value;
D = D.replace(/^(\s*)(.*?)\/\/\s*?([^\s].*?)$/gm, "$1$2\n$1var rem = new Function(\ "$3\ ");\n ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?)\ "(.*?)\ "(.*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2&rem;$3&rem;$4&rem;$5 ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?)\ "(.*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2&rem;$3&rem;$4 ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?)\ "(.*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2&rem;$3&rem;$4 ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2&rem;$3 ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2&rem;$3 ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2&rem;$3 ");
D = D.replace(/(var rem = new Function\(\ ".*?)\ "(.*?\ "\);)$/gm, "$1&rem;$2 ");
//Debug
//document.getElementById( "B ").value = D; Break();//Debug
eval( "function plzTidy(){ " + D + "} ");
store = document.getElementById( "store ");
store.value = plzTidy;
var X = store.value;
//Debug
//document.getElementById( "B ").value = X; Break();
X = X.replace(/function plzTidy\(\) \{/, " ").replace(/\}\s*$/, " ").replace(/([\r\n]+)/g, "$1 ");
// Four spaces to a Tab(\\t)
while (X.search(/^(\t*) {4}/gim) > -1)
{
X = X.replace(/^(\t*) {4}/gim, "$1\t ");
}
// "{ " and "} " at a new line.
X = X.replace(/^(\t+)([^ \r\n\{][^\r\n\{]*) *\{$/gim, "$1$2\n$1\{ ");
X = X.replace(/^(\t+)\} *([^ \r\n\}][^\r\n\}]*)$/gim, "$1\}\n$1$2 ");
X = X.replace(/([ \t]+)$/gim, " ");
X = X.replace(/([\r\n])[\r\n]/gim, "$1 ");
X = X.replace(/&rem;/gim, "\ " ");
X = X.replace(/var rem = new Function\(\ "(.*?)\ "\);/gim, "\/\/ $1 ");
//Output
document.getElementById( "B ").value = X;
document.getElementById( "B ").focus();
document.getElementById( "B ").select();
document.getElementById( "OUTPUT ").innerHTML=X.replace(/[\r\n]/gim, " <br> ");
}
function CopyCodes()
{//
document.getElementById( "B ").select();
js=document.getElementById( "B ").createTextRange();
js.execCommand( "Copy ");
}
</SCRIPT>
<TITLE> Javascript Tidy </TITLE>
<STYLE>
<!--
* { font-size: 10pt; }
H1 { font-size: 16pt; font-weight: bold }
-->
</STYLE>
</HEAD>
<BODY>
<H1> Javascript Tidy </H1>
<TEXTAREA ID= "A " NAME= "A " STYLE= "width: 100%; height: 38% " ONFOCUS= "if( this.value == this.defaultValue ) { this.value = ' '; } " ONDBLCLICK= "this.focus();this.select(); "> Your code here! </TEXTAREA>
<BUTTON ONCLICK= "tidy() "> Tidy my Javascript </BUTTON>
<BUTTON ONCLICK= "CopyCodes( 'B ') "> Copy </BUTTON>
<TEXTAREA ID= "B " NAME= "B " STYLE= "width: 100%; height: 38% " ONDBLCLICK= "this.focus();this.select(); "> </TEXTAREA>
<INPUT TYPE= "hidden " ID= "store ">
<P ALIGN= "right "> From <A HREF= "http://rick.measham.id.au/paste/jstidy.htm "> rick.measham.id.au </A> <BR>
Modified by <A HREF= "mailto:shortway@sina.com "> Shortway </A> </P>
<SPAN ID= "OUTPUT "> </SPAN>
</BODY>
</HTML>
[解决办法]
alert(unescape( "\u4F60 "))
[解决办法]
我用的ie,帮顶.
[解决办法]
不太清楚你编码(?)的原因,但是
可以采用自己的编码,如:
把非asc码用encodeURI转换,也可以自己编码转换
到最后再转回来。