![](/img/trans.png)
[英]Javascript toLowerCase() giving different length with non-Latin characters
[英]how to calculate length of characters when text can have non latin letters
我有以等寬字體顯示ASCII表的功能
function ascii_table(array, header) {
if (!array.length) {
return '';
}
for (var i = array.length - 1; i >= 0; i--) {
var row = array[i];
var stacks = [];
for (var j = 0; j < row.length; j++) {
var new_lines = row[j].toString().split("\n");
row[j] = new_lines.shift();
stacks.push(new_lines);
}
var new_rows_count = Math.max.apply(Math, stacks.map(function(column) {
return column.length;
}));
for (var k = new_rows_count - 1; k >= 0; k--) {
array.splice(i + 1, 0, stacks.map(function(column) {
return column[k] || "";
}));
}
}
var lengths = array[0].map(function(_, i) {
var col = array.map(function(row) {
if (row[i] != undefined) {
return row[i].length;
} else {
return 0;
}
});
return Math.max.apply(Math, col);
});
// column padding
array = array.map(function(row) {
return '| ' + row.map(function(item, i) {
var size = item.length;
if (size < lengths[i]) {
if (item.match(/\t/g)) {
// tab have 4 spaces
size += item.match(/\t/g).length*3;
}
item += new Array(lengths[i] - size + 1).join(' ');
}
return item;
}).join(' | ') + ' |';
});
var sep = '+' + lengths.map(function(length) {
return new Array(length + 3).join('-');
}).join('+') + '+';
if (header) {
return sep + '\n' + array[0] + '\n' + sep + '\n' +
array.slice(1).join('\n') + '\n' + sep;
} else {
return sep + '\n' + array.join('\n') + '\n' + sep;
}
}
但是如果表格單元格包含日語字母(例如中文
而失敗,則當一個字符的寬度為兩個ascii字母時:
中文
rock
我該如何處理這種情況? 我怎么知道一個字符的寬度是否為兩個大小?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.