2012-08-09 87 views
1

就我而言,我最近选择了irrKlang库,该库允许我在不做太多工作的情况下处理音频文件。然后我遇到了库中不支持文件路径中的unicode字符的问题。它要么读取不正确(即使读取错误,它仍然可以找到该文件),或者只是忽略它,给我留下无效的文件路径。如何使用不支持Unicode字符的库

搜索他们的支持论坛来解决这个问题,但是我摆脱它的所有内容都是“unicode?uhhh为什么不使用ascii?”对unicode的态度,我认为并不少见。

我可以用什么技术将unicode字符串可靠地传递给没有unicode支持的库?

+1

的只有没有Unicode支持的库需要的策略是能够以尽可能快的速度运行*,远离它们。在21世纪,这种愚蠢的愚蠢根本没有任何借口。你不能在*你的用户身上造成这种巨大的愚蠢。当您尝试解释您的应用程序的严重局限性实际上是您使用并无法控制的第三方库的错误时,他们既不会关心也不理解。他们只会看到一个严重受限,破碎的应用程序,你不会修复。 – 2012-08-09 07:26:36

+0

@CodyGray只是因为你不知道如何使用非Unicode字符串来操作程序,并不意味着它们是无用的。例如那些只处理ASCII字符串的程序不会受到字节顺序问题的影响。 第二我同意提供给最终用户的内容,但这并不意味着程序员应该无法妥协。第三,前一段时间写了很多代码,并且已经通过使用unicode api解析地址(任何库知道如何解释)并将结果引用传递给所需的API来桥接桥接。 – awiebe 2012-08-20 01:26:50

回答

0

简而言之,你可以使用一个字节数组通过它们,然后在另一端将它解释为一个unicode数组,但是如果它不做unicode,它不会执行unicode 。

将unicode字符串传递给不能解释它的库是没有意义的。

如果您需要执行某些特定的操作(例如在带有unicode路径(例如HFS +)的文件系统上使用加载命令),则不要这样做。而是使用系统提供的文件API并将数据推送到不合作的库构造函数中。

如果你认真有这个Unicode文件路径的业务问题,因为你不通过地址以及工作和位流周围,然后进行简单的解决办法是让自己的功能:

obj_ptr* loadObjFromUnicodePath(path) 
{ 
//create tmp ASCII named symlink to file at arg(path). 
//call load API of irrKlang on symlink. 
//delete tmp symlink, return object. 
} 
+0

这一切都很好,除非路径实际上包含不能很好地转换为ASCII的字符。这不仅仅是一个理论问题,现在我的机器上有很多路径包含没有等效ASCII表示的Unicode字符。如果lib无法处理,它会窒息而无法使用该文件。 – 2012-08-09 07:28:13

+0

@CodyGray诀窍是*创建一个ASCII符号链接到文件,而不是将Unicode路径转换为ASCII。话虽如此,你在这个问题下的评论应该可能是一个答案。 – 2012-08-09 08:30:35