场景
您有许多以UTF-16格式存储的XML文件,这些文件存储在数据库或服务器上,空间不是问题。您需要将其中大部分需要作为XML文件传输到其他系统,并尽可能地节省空间。
问题
实际上,只有约10%以UTF-16格式存储的文件需要以UTF-16格式存储,其余可以安全地以UTF-8格式存储。如果我们可以将需要采用UTF-16格式的文件与其他文件采用UTF-8格式的文件区分开来,我们可以在文件系统上节省约40%的空间。
我们尝试过对数据进行压缩,但发现无论采用UTF-16还是UTF-8,我们都可以获得相同的压缩比例,而UTF-8的压缩速度更快。因此,最终如果尽可能多地使用UTF-8保存数据,我们不仅可以在未压缩时节省空间,即使在压缩后,我们仍然可以节省更多的空间,甚至可以通过压缩本身来节省时间。
目标
确定XML文件中是否存在需要UTF-16格式的Unicode字符,以便我们只在必要时使用UTF-16格式。
关于XML文件和数据的一些详细信息
虽然我们控制XML本身的模式,但是从Unicode的角度来看,我们无法控制可以放入值的“字符串”类型,因为源自由提供Unicode数据供我们使用。但是,这种情况很少发生,因此我们不想每次都使用UTF-16仅支持只需要10%时间的东西。
开发环境
我们正在使用带有.NET Framework 4.0的C#。
编辑:解决方案
解决方案只需使用UTF-8。
问题基于我的误解而产生,感谢每个人帮助我纠正。谢谢!
char
类型是一个16位整数,当迭代字符串时可能会返回代理项。看,那个人说他有一些“非UTF-8安全数据”,我不得不猜测它可能意味着什么:V - Matti Virkkunen