ASP Jscriptの2つの特殊な問題
2848 ワード
従来のASP(Jscript,非VBScript)で2つの特殊な問題に遭遇したことを特記した.
ASPプログラムのルートディレクトリの下にあるglobal.asaファイルは、アプリケーションの起動ファイルです.VBScript/Jscriptで記述できます.しかし、プロファイルの作成中にGlobalが見つかりました.asaはASCIIコードでしか保存できないので、直接中国語を使うことはできません.これはマイクロソフトの設計上の不足と言わざるを得ない--現在の最新のIISもこの問題を解決していない(現在の環境はIIS 8 Express).外部からファイルを導入する場合は、次のようになります.
JSONプロファイルを保存するときは、encodeUnicode(json)を呼び出せばよい.実際、この問題の解決方法については、弟が以前書いた博文に啓発された.「Javascript中国語エスケープ文字」だ.
以下に修正します.
一、Global.asaは中国語を排斥する
ASPプログラムのルートディレクトリの下にあるglobal.asaファイルは、アプリケーションの起動ファイルです.VBScript/Jscriptで記述できます.しかし、プロファイルの作成中にGlobalが見つかりました.asaはASCIIコードでしか保存できないので、直接中国語を使うことはできません.これはマイクロソフトの設計上の不足と言わざるを得ない--現在の最新のIISもこの問題を解決していない(現在の環境はIIS 8 Express).外部からファイルを導入する場合は、次のようになります.
<script runat="server" language="ecmascript" src="/public/config.js"></script>
<script runat="server" language="ecmascript" src="/public/section.js"></script>
<script runat="server" language="ecmascript" src="/bigfoot/asp_init.js"></script>
も効果がありません.これに鑑みて、中国語を特殊符号化しなければならないのはASCII符号化セットの範囲を超えていないからである.そこで、JavaScript言語自体はunicode文字列の16進数表記をサポートしており、「u 96 c 6u 56 e 2u 6982u 51 b 5」のように表示されているのに「集団概況」の値であることを思い出す.入力は中国語ではありませんが、表示中にJSは自動的に復号され、人間が正しく読む文字が表示されます.これは私たちの現在のニーズをよく満たしています.次に、上記の中国語の符号化アルゴリズムを見つけました.function encodeUnicode(str){
var arr = [];
var hex;
for (var i = 0 , j = str.length; i < j; i++) {
hex = ("00" + str.charCodeAt(i).toString(16)).slice(-4);
if(hex.length < 4){ //
hex = '0' + hex;
}
arr.push(hex);
}
return "\\u" + arr.join("\\u");
}
は(手動で復号する必要はありません):function un(str) {
return unescape(str.replace(////g, "%"));
}
JSONプロファイルを保存するときは、encodeUnicode(json)を呼び出せばよい.実際、この問題の解決方法については、弟が以前書いた博文に啓発された.「Javascript中国語エスケープ文字」だ.
二、アプリケーションオブジェクトの配列異常を読み取る
以下に修正します.
var newObj = [];
/**
* @private
* @param {mixed} v
* @return {Boolean} hash( )。
*/
function isArray(v){
return !!v && (isArray.toString.call(v) != isArray.token) && v.length && typeof v != 'string' && typeof v != 'function';
}
isArray.toString = Object.prototype.toString
,isArray.token = '[object Object]';
(function(source, target){
var sourceObj ,targetObj;
for(var i = 0, j = source.length; i < j; i++){
sourceObj = source[i]
,targetObj = {};
for(var k in sourceObj){
var el = sourceObj[k];
// Array
targetObj[k] = isArray(el) ? arguments.callee(el, []) : el;
}
target.push(targetObj);
}
return target;
})(Application.staticObjects("dict").Item('$$_site'), newObj);