最近在做一个小说app,然而昨天在做阅读页时遇到了一个奇葩的坑。
半角转全角
既然是阅读页嘛,要等宽才好看嘛,那就安排!
首先必须是全部字符转换为全角啦,于是就顺手写了下面这些代码。这不是so easy吗,哼哼~
String toDBC(String input) {
var c = input.codeUnits;
var s = '';
for (var i = 0; i < c.length; i++) {
if (c[i] == 32) {
// 半角空格
s = s + String.fromCharCode(12288);
} else if (c[i] < 127) {
// 半角字符
s = s + String.fromCharCode(c[i] + 65248);
} else {
// 非半角字符
s = s + String.fromCharCode(c[i]);
}
}
return s;
}
刷新模拟器 休~
WTF!!! 什么情况啊这是,一瞬间 口吐芬芳~ 换行呢? 还有这个奇怪的符号“ﻪ”是什么鬼?
于是我一顿尝试 str.replaceAll('\n','\r'), str.replaceAll('\n','\n') , str.replaceAll('\n','\r\n') ,
还是各种奇怪的问题,\r的话虽然能换行下去 但是行首没有空格,显然是不行的。 那么两个\r 行不行?也是不行
于是我就气呼呼的滚去睡觉了。
问题的根源
早上醒来神清气爽,吃完早餐打开电脑,一道亮光突然射进了脑海。 我tm是不是把换行符给转换成了全角? 于是我用在线转换工具试了一下
欸?貌似并不是转换的问题? 不信邪的我又打开了dartpad
String re = '\n';
print(re.length);
print(re.codeUnits.first);
re =toDBC(re);
print(re);
结果是
终于破案了~
那就在for循环里排除掉就好了嘛
String toDBC(String input) {
var c = input.codeUnits;
var s = '';
for (var i = 0; i < c.length; i++) {
if (c[i] == 32) {
// 半角空格
s = s + String.fromCharCode(12288);
} else if (c[i] < 127) {
// 半角英文字符
//如果前后为换行符,则不转换
if (c[i] == 10) {
s = s + String.fromCharCode(c[i]);
} else {
s = s + String.fromCharCode(c[i] + 65248);
}
} else {
// 非半角字符
s = s + String.fromCharCode(c[i]);
}
}
return s;
}
再运行一下看看,大功告成!
下一章打算跟大家讨论一下分页计算的事情,请各位大神多多指导!感谢啦