簡體   English   中英

當文本可以包含非拉丁字母時,如何計算字符長度

[英]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

我該如何處理這種情況? 我怎么知道一個字符的寬度是否為兩個大小?

您需要檢查字符的寬度而不是長度。 任何wcwidth 端口正常)都可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM