如果您的程序只有英文,为什么要使用Unicode?

bsr*_*uth 16 unicode

所以我读过Joel的文章,并查看了SO,似乎从ASCII切换到Unicode的唯一原因是国际化.作为一项政策,我所工作的公司只会发布英文软件,即使我们的客户遍布全球.由于我们所有的客户都是科学家,因此他们具有足够的英语功能,可以将我们的软件用作非母语人士.或者逻辑如此.由于此策略,没有迫切需要切换到Unicode以支持其他语言.

但是,我正在开始一个新项目,并希望使用Unicode(因为这是一个负责任的程序员应该做的,对吧?).为此,我们必须开始将我们编写的所有库转换为Unicode.这不是一项小任务.

如果程序本身的国际化不被认为是一个正当的理由,那么如何将重新编码库和程序所花费的时间用于转换为Unicode?

jal*_*alf 32

这显然取决于你的应用程序实际上做了什么,但仅仅因为你只有英文版本绝不意味着国际化不是问题.

如果我想存储使用非英文字符的客户名称该怎么办?或者是另一个国家/地区的名称?

作为一个额外的好处(因为你说你的目标是科学家)是各种科学符号和符号作为Unicode的一部分得到支持.

最终,我发现保持一致更容易.无论您在哪台计算机上运行应用程序,Unicode的行为都相同.非unicode意味着您默认使用某些与语言环境相关的字符集或代码页,因此在您的计算机上看起来很好的文本可能会在其他人的垃圾字符中充满.

除此之外,您可能不需要一次性将所有库转换为Unicode.根据需要编写包装器,以便在Unicode和您使用的任何编码之间进行转换.

如果您使用UTF-8作为Unicode文本,您甚至可以读取纯ASCII字符串,这可以节省一些转换问题.


Zac*_*ach 16

他们说他们现在总会把它用英语,但你承认你有全球客户.一位客户说,国际化是一个交易破坏者,他们真的会拒绝他们吗?

澄清一点,我试图让你说他们不会接受这种推理,但这是合理的.

IMO,总是比对不起更安全.

  • 此外,从一开始就更容易支持Unicode,而不是稍后在某些客户端需要时对其进行改进. (7认同)
  • 从技术上讲,这不是一个经典的稻草人论点吗?使用不存在的问题试图赢得一个参数.我认为jalf的论点更强大,因为它指出了Unicode的具体好处.但是,如果bsruth(或他的营销部门)是为了画布客户并发现Unicode对他们是否重要 - 那么这可能会提供一个具体的商业案例,他的管理层应该考虑这个案例. (2认同)

S.L*_*ott 15

扩展的科学,技术和数学字符集规则.

还有什么地方可以说⟦∀c|c∈Unicode⟧和类似的技术内容.


Bri*_*ell 12

超出7位ASCII范围的字符在英语中也很有用.有没有人使用你的软件甚至需要写下€标志?还是£?区分"简历"和"简历"怎么样?你说它被世界各地的科学家所使用,他们的名字可能是"Jörg"或"Guðmundsdóttir".在科学的环境中,即使在英语中,也可以将像λ这样的波长,像Å这样的单位或角度称为Θ.

其中一些字符,如"ö","£"和"€"可能有8位编码,如ISO-8859-1或Windows-1252,所以看起来你可能只是使用那些编码而且是完成它.问题在于,许多人经常使用这些范围之外的字符,因此许多现有数据以UTF-8编码.如果您的软件在导入数据时不理解,它可能会将UTF-8中的"£"字符解释为2个Windows-1252字符的序列,并将其渲染为"£".如果这种错误未被检测到足够长的时间,您就可以开始使数据严重乱码,因为多次错误解释会越来越多地改变您的数据,直到它变得无法恢复.

在程序设计的早期考虑这些问题是很好的.由于字符串往往是非常低级的概念,贯穿整个程序,并且有很多关于它们如何隐式使用它们的假设,如果以后向程序添加Unicode支持可能会非常困难和昂贵.你从来没有想过这个问题.

我的建议是尽可能始终使用支持Unicode的字符串类型和库,并确保处理字符串的任何测试(无论是单元,集成,回归或任何其他类型的测试)尝试通过您的传递一些Unicode字符串系统,以确保他们的工作和安然无恙.

如果你不处理Unicode,那么我建议确保系统接受的所有数据都是7位干净的(也就是说,7位US-ASCII范围之外没有字符).这将有助于避免ISO-8859系列和UTF-8等8位传统编码之间的不兼容问题.


sim*_*mao 11

假设你的程序允许我把我的名字放在它,表格,对话框等等,我的名字不能用ascii字符写成......即使你的程序是英文的,数据也可能是其他语言...


alb*_*ein 10

如果您的用户使用国际字符,那么您的软件没有翻译并不重要,那么您需要支持unicode才能进行正确的大写,排序等.

  • 是的,但它至少可以解决它们. (4认同)

yle*_*bre 5

好吧,您的用户可能会了解并理解英语,但他们仍然可以拥有"本地"名称.如果您允许用户对您的应用程序进行任何类型的输入,他们可能希望使用不属于ascii的字符.如果您不支持unicode,则无法使用这些名称.您将强制用户采用更简单的名称,因为应用程序不够智能,无法处理特殊字符.

另一件事是,即使现在的标准是应用程序只会以英文发布,你也阻止了使用ASCII进行国际化的可能性,增加了当公司政策决定翻译时需要完成的工作.好事.公司政策很好,但也有所改变.


Fra*_*man 5

如果您没有业务需要切换到unicode,那么就不要这样做.我的基础是你认为你需要更改与你需要更改的组件无关的代码,以使其全部使用Unicode.如果您可以制作组件/功能,那么您就可以使用"Unicode ready"而不会将代码扩展到许多其他组件(特别是没有良好测试覆盖率的其他组件),那么请继续使用unicode.但是,如果没有业务需求,不要浪费整个代码库.

如果以后出现业务需求,那么请解决它.否则,你不会需要它.

此线程中的人员可能会假设它成为业务需求的场景.在考虑这些方案值得解决之前,请由产品经理运行这些方案.当你提问时,确保他们知道解决这些问题的成本.


Jon*_*nna 5

我想说这种态度表达了 na\xc3\xafvet\xc3\xa9,但我无法仅用 ASCII 拼写 na\xc3\xafvet\xc3\xa9 。

\n\n

ASCII 仍然适用于某些仅用于计算机的代码,但对于机器和用户之间的 fa\xc3\xa7ade 没有好处。

\n\n

即使没有《纽约客》的老式合作方式,如果一个名叫 Zo\xc3\xab 的可怜女人的雇主使用这样的系统,她将如何应对?

\n\n

唉,她甚至不会寻找其他工作,因为更新她的 r\xc3\xa9sum\xc3\xa9 是不可能的,她必须继续工作。她要如何向她的未婚夫\xc3\xa9e解释呢?

\n