你需要非常清楚你的字符串是如何編碼到你的二進制文件中的。當您在代碼中執行< <「StringLiteral」>>時,您必須意識到這只是代碼點列表的二進制序列化。您的Erlang編譯器會將您的代碼讀取爲ISO-8859-1字符,因此只要您只使用Latin-1字符並且始終如此執行此操作,則您應該沒問題,但這對於國際化來說並不是非常友好。
這些天的大多數應用軟件應該更喜歡unicode編碼。對於前128個碼點,UTF-8與您的< <「StringLiteral」兼容,但對於第128個碼點不兼容,所以要小心。如果您在代碼中使用< <「StringLiteral」>>,您可能會對您在UTF-8編碼的Web應用程序中看到的內容感到驚訝。
有一個關於二進制支持的EEP提案,形式爲< <「StringLiteral」/ utf8 >>,但我認爲這不是最終的結果。
另外請注意,如果存在包含要拆分的IS0-8859-1字節的多字節字符,則您的二進制:split/2函數可能會在UTF-8中產生意外的結果。
有些人會認爲UTF-16是一種更好的編碼方式,因爲如果您假設或驗證不存在32位字符,則可以更有效地進行分析,並且可以更容易地按索引拆分。
應使用unicode module,但在使用文字時要小心。