文本溢出与国际化
来源:互联网 发布:怎么更改淘宝店名 编辑:程序博客网 时间:2024/05/19 02:23
无论是table控件中可调节长度的column,还是tooltip中说明文字,想必大家对text ellipsis(文本溢出)的场景都再熟悉不过。说得再直白些,就是文本显示的部分省略,通过该功能可以有效避免layoutbreak问题。话说这对国际化人开发和测试人员来说应该是个利好啊,这样不就有效避免了各种longstring带来的布局问题么?Absolutely!然而世间事物就是这么奇特,往往兴一利则生一弊……
不信?那么就请各位看官上眼,关注Name字段,我们可以清晰的看到一个实心儿的diamondquestion mark,何故?
抢答中——dev肯定没使用UTF-8码表!
嗯,非常好!我就欣赏积极参与的!不过……大哥!再看看context吧!笔者开篇就在讲述text ellipsis,合着都白说啦是么?得嘞,不卖关子,让我们直接看dev是如何fix该问题的。关于Name的显示,原本的JS代码为return ToolUtil.ellipsiseText(key, value); 现在修改成了return value; 问题还复现么?自然是不复现啦,您都把ellipsis取消了,还怎么个复现法儿?不过平心而论,该解法相当的凑合,绝对属于用压路机治罗锅的法子,罗锅是治好了,可人没啦……
于是乎,我们不禁扪心自问,难道就没有更合适的解决办法么?答案自然是有的,首先让我来帮大家用代码重新下该问题吧。
public class ellipsisTest { publicstatic void main(String[] args) throws UnsupportedEncodingException { Stringstr = "我的textellipsis测试!"; for(int i = 0; i < str.getBytes("UTF-8").length-1; i++) { System.out.println("截取"+ (i + 1) + "个字节的结果是"+ cutStringByByte(str, i + 1) + "..."); } } privatestatic String cutStringByByte(String str, int len) throwsUnsupportedEncodingException { byte[]buf = str.getBytes("UTF-8"); intcount = 0; for(int i = len - 1; i >= 0; i--) { if(buf[i] < 0) { count++; }else { break; } } if(count % 2 == 0) { returnnew String(buf, 0, len, "UTF-8"); }else { returnnew String(buf, 0, len - 1, "UTF-8"); }}
截取1个字节的结果是...截取2个字节的结果是�...截取3个字节的结果是�...截取4个字节的结果是我�...截取5个字节的结果是我�...截取6个字节的结果是我的...截取7个字节的结果是我的t...截取8个字节的结果是我的te...截取9个字节的结果是我的tex...截取10个字节的结果是我的text...截取11个字节的结果是我的text...截取12个字节的结果是我的texte...截取13个字节的结果是我的textel...截取14个字节的结果是我的textell...截取15个字节的结果是我的textelli...截取16个字节的结果是我的textellip...截取17个字节的结果是我的textellips...截取18个字节的结果是我的textellipsi...截取19个字节的结果是我的textellipsis...截取20个字节的结果是我的textellipsis...截取21个字节的结果是我的textellipsis�...截取22个字节的结果是我的textellipsis�...截取23个字节的结果是我的textellipsis测�...截取24个字节的结果是我的textellipsis测�...截取25个字节的结果是我的textellipsis测试...截取26个字节的结果是我的textellipsis测试...截取27个字节的结果是我的textellipsis测试�...
到这里,大家可以看到我应该已经完美的模拟了该问题的本质。接下来我将会尝试对其进行fix,修改cutStringByByte方法中关于length的判断。
private static String cutStringByByte(String str, int len)throws UnsupportedEncodingException { byte[]buf = str.getBytes("UTF-8"); intcount = 0; for(int i = len - 1; i >= 0; i--) { if(buf[i] < 0) { count++; }else { break; } } if(count % 3 == 0) { returnnew String(buf, 0, len, "UTF-8"); } elseif (count % 3 == 1) { returnnew String(buf, 0, len - 1, "UTF-8"); } else{ returnnew String(buf, 0, len - 2, "UTF-8"); }}
截取1个字节的结果是...截取2个字节的结果是...截取3个字节的结果是我...截取4个字节的结果是我...截取5个字节的结果是我...截取6个字节的结果是我的...截取7个字节的结果是我的t...截取8个字节的结果是我的te...截取9个字节的结果是我的tex...截取10个字节的结果是我的text...截取11个字节的结果是我的text...截取12个字节的结果是我的texte...截取13个字节的结果是我的textel...截取14个字节的结果是我的textell...截取15个字节的结果是我的textelli...截取16个字节的结果是我的textellip...截取17个字节的结果是我的textellips...截取18个字节的结果是我的textellipsi...截取19个字节的结果是我的textellipsis...截取20个字节的结果是我的textellipsis...截取21个字节的结果是我的textellipsis...截取22个字节的结果是我的textellipsis测...截取23个字节的结果是我的textellipsis测...截取24个字节的结果是我的textellipsis测...截取25个字节的结果是我的textellipsis测试...截取26个字节的结果是我的textellipsis测试...截取27个字节的结果是我的textellipsis测试...
再次打印,终于看到了期望的无乱码的结果。到这里,个人认为该问题才完美的得到了解决。同时作为一个国际化全栈测试工程师或者国际化测试consultant,也绝对应该有自信和义务去说服dev取代原先简单粗暴的returnvalue; 你们说呢?ヾ(o◕∀◕)ノヾ
- 文本溢出与国际化
- 单行文本溢出与多行文本溢出
- Android 国际化,文本国际化,图片国际化
- 国际化标签与JSTL函数(动态的文本)
- 【css】css文本换行与溢出显示为省略号
- mono:国际化文本
- Struts动态文本国际化
- struts 动态文本国际化
- 固定文本的国际化
- 国际化动态文本(MessageFormat)
- 溢出文本显示省略号
- 溢出文本显示省略号
- CSS文本溢出省略号
- 溢出文本省略
- 文本溢出显示省略号
- 文本溢出显示省略号
- CSS3文本溢出
- text-overflow溢出文本
- 跑 Monkey
- python基础语法(6) 函数1
- Java 获取当前时间往前推最近12月“年-月”格式的时间,方便统计使用
- Android Studio相见恨晚的操作锦集
- 多次复制可粘贴小工具
- 文本溢出与国际化
- 虚拟机自适应屏幕的分辨率(以xp为例)
- 3.安卓基础——环境搭建&基本布局&xml解析
- 检测图片中的车辆并画出来,保存到指定文件夹
- jquery常用方法总结
- java系统高并发解决方案(转载)
- linux 文本编辑命令grep sed awk
- 【matlab】isstrprop 解读
- Servlet的运行机制和生命周期