我正在尝试查看我们为美国用户构建的应用程序是否可以扩展为支持国际用户。我们的应用程序提供在线培训和课程目录,就国际用户而言,我们需要收集他们的姓名和地址。
如果我们更新我们的oracle数据库以使用NVARCHAR列(支持UTF-16)并且我们的网页使用UTF-8编码类型,如果有人输入中文地址...我们如何“转换”它英语(我们的员工只有英语使用者)?我们是否必须使用谷歌翻译进行转换?
我们的大多数网页输入字段都有正则表达式验证器,只允许A-Z和0-9个字符...我猜这些将需要删除才能支持国际用户?
答案 0 :(得分:1)
您无法将中文名称或地址转换为英语,是吗?这没有任何意义。许多中国人也用拉丁字母写下他们的名字,我怀疑这是大多数人在你的网站上注册时会做的事情。
你也可以阅读编码,因为utf-8和utf-16完全不同,编码是一个真正的丛林。我不认为utf-16涵盖了utf-8所做的utf字符集中的所有代码点。例如,请参阅:http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings
您应该做的事情将取决于您将如何处理您保存的信息。我建议开始考虑业务流程会带来哪些限制可能是一个好主意。例如,如果您使用地址邮寄东西,我想如果地址是用中文字母写的,美国邮政服务会有点混乱。
答案 1 :(得分:1)
如果你想支持中文,那么将数据库文本字段转换为NVARCHAR(我在这里感知MS SQL)是不够的。如果您使用的是MS SQL 2012或更高版本(必须正确支持Supplementary Characters(不仅需要中文,还需要其他语言)。您基本上需要设置以{{1 (正如你猜测的那样"补充字符")。只有这样你的数据库才会使用UTF-16(否则会使用UCS-2)。
这是一回事。我不认为我得到你说的话,但是如果你想在URI中使用国际字符(基本上是IRI),这些字符将是:
但是,如果您指的是域名(明智地移动中国域名),将会发生不同的过程(仅限域名部分!)。它们将被转换为所谓的Punycode
BTW。拥有中文域名,不一定意味着使用中文字符。由于从键盘输入中文字符有问题(Input Method Editors,有人吗?),使用_SC
这样的域名会好一些。
好的,再次重读你的问题,似乎你在询问邮寄地址。那么,你不应该在任何情况下将字符转换成英文。你需要什么?如果您想发送发票(特别是通过蜗牛邮件),您实际上 需要 正确的中文地址。你不应该改变它 如果您需要它来验证信用卡而您的服务提供商只接受ASCII,您应该考虑如何更改服务提供商。没有借口,抱歉。如果您不能(出于任何原因),请询问他们如何准备数据。他们必须对他们的错误负责。
至于验证员......好吧,既然它是.Net,我无能为力。您需要重新编写正则表达式才能正确处理国际字符
BTW。如果您使用888.cn
的内容来验证个人姓名,那么O' Reilly先生将无法使用您的服务。同样,[A-Za-z+] [A-Za-z+]
等地址也会被拒绝。