我是javascript的新手,我只想将字符串转换为像我这样的人可以阅读的格式。这是我想要做的一个例子......
string2size(串){ //一些很棒的编码我不知道如何制作 返回awesomeAnswer }
现在返回应该给我一些像56字节或12kb或1mb的东西,具体取决于字符串的数量。
所以如果字符串是...... string =“有一位老妇人住在鞋里”; 那么string2size(string)应该返回类似3kb的内容。
现在我知道有一个utf8谈话,我不会反对并将其添加到该函数中。
我尝试过google和Yahoo搜索,但他们谈论使用php,但我真的需要它用于javascript。我感谢任何人的时间。 -Teske
答案 0 :(得分:4)
首先列出您要使用的单位。例如:
// 1024-based units. Kibibyte, Mebibyte etc.
//
var BINARY_UNITS= [1024, 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yo'];
// SI units, also Hard Disc Manufacturers' rip-off kilobytes
//
var SI_UNITS= [1000, 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
然后创建一个函数来查找并除以最合适的单位数:
function unitify(n, units) {
for (var i= units.length; i-->1;) {
var unit= Math.pow(units[0], i);
if (n>=unit)
return Math.floor(n/unit)+units[i];
}
return n; // no prefix, single units
}
然后拨打一个长度:
var desc= 'File, '+unitify(content.length, UNITS_BINARY)+'B';
desc+= ' or in SI, '+unitify(content.length, UNITS_SI)+'B';
// eg. File, 977KiB or in SI 1MB
我不确定您对UTF-8的意思,但是如果您想找出编码为字节的字符串的长度,您必须自己将该字符串编码为UTF-8。幸运的是,有一个廉价的技巧可以在JavaScript中获得UTF-8编码器:
var bytes= unescape(encodeURIComponent(chars));
alert(unitify(bytes, BINARY_UNITS)+'B');
答案 1 :(得分:1)
这样的事情会对你有帮助。
function getStringBytes(string) {
var bytes = 0;
var i;
for (i = 0; i < string.length; i++) {
var c = fixedCharCodeAt(string, i);
// in accordance with http://en.wikipedia.org/wiki/UTF-8#Description
bytes += c === false ? 0 :
c <= 0x007f ? 1 :
c <= 0x07FF ? 2 :
c <= 0xFFFF ? 3 :
c <= 0x1FFFFF ? 4 :
c <= 0x3FFFFFF ? 5 : 6;
}
return bytes;
}
function fixedCharCodeAt (str, idx) {
// ex. fixedCharCodeAt ('\uD800\uDC00', 0); // 65536
// ex. fixedCharCodeAt ('\uD800\uDC00', 1); // false
idx = idx || 0;
var code = str.charCodeAt(idx);
var hi, low;
if (0xD800 <= code && code <= 0xDBFF) { // High surrogate (could change last hex to 0xDB7F to treat high private surrogates as single characters)
hi = code;
low = str.charCodeAt(idx + 1);
if (isNaN(low)) {
throw new Error('High surrogate not followed by low surrogate');
}
return ((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000;
}
if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
return false;
}
return code;
}