C# 从集合中猜测c中UTF-8数据的最佳编码#

C# 从集合中猜测c中UTF-8数据的最佳编码#,c#,encoding,utf-8,C#,Encoding,Utf 8,我有UTF-8格式的文本。我无法预测这篇文章会用什么语言 要在收据热敏打印机上打印此文本,我需要选择最佳编码以显示文本并转换为文本。不幸的是,UTF-8不受支持。所有可用编码只能表示字符的子集 因此,我需要找到最好的选择(例如,从这里提到的列表)来转换数据,并在转换过程中丢失尽可能少的字符(我知道我将无法将西里尔文与泰语一起打印) 这不是一个“猜测编码”的问题,而是选择最佳编码以使可表示字符的损失最小 有人见过好方法吗?好问题。这些是您的打印机支持的字符集吗?我下意识的反应是“买一台更好的打印机

我有UTF-8格式的文本。我无法预测这篇文章会用什么语言

要在收据热敏打印机上打印此文本,我需要选择最佳编码以显示文本并转换为文本。不幸的是,UTF-8不受支持。所有可用编码只能表示字符的子集

因此,我需要找到最好的选择(例如,从这里提到的列表)来转换数据,并在转换过程中丢失尽可能少的字符(我知道我将无法将西里尔文与泰语一起打印)

这不是一个“猜测编码”的问题,而是选择最佳编码以使可表示字符的损失最小


有人见过好方法吗?

好问题。这些是您的打印机支持的字符集吗?我下意识的反应是“买一台更好的打印机,一台支持Unicode的打印机”,但我想这不是一个选择。除了列举可用的编码(即,将每个编码转换为Unicode代码点一次),并查看给定文本中哪些编码的“不可打印”最少之外,我真的看不出有什么好方法。UTF8或16与.NET相同-它是Unicode。本质上,您需要询问哪个代码页覆盖Unicode字符串中的所有或大部分字符。字符被分组在块中,这些块或多或少地覆盖了区域设置,因此您可以将块名称映射到打印机代码页。我链接的列表几乎是行业标准,有些可能还有一个外来代码页,有些可能会遗漏一些。重新使用已安装的现有合作伙伴POS打印机并不奇怪,因此无法控制设备。忽略.NET中的UTF-8/UTF-16,在这里没有什么区别。那么,是否有一种实用的方法将代码页映射到unicode块?