[英]Ruby string encoding in Ruby 1.8.7
我正在使用Ruby C API(來自Objective C)創建一個Ruby字符串,它恰好包含芬蘭語字符。
一旦進入Ruby,我就會調用一個gem進行一些操作,它會截斷字符串,但編碼的字符會被截斷不正確 - 非常像這個問題:
一個示例字符串是HpääseesyvemmälleAelämään - 變音符號變為類似\\ 30333之類的東西但是當被截斷時最終會變成\\ 303這是一個問題。
我不想破解gem以解決這個問題,因為我已經使用Ruby中直接打開的相同字符串進行了測試,並且它工作正常。
所以我知道我把錯誤的東西傳給了Ruby。
以下是我將NSString轉換為值以在Ruby中使用的方法。
- (VALUE) toRubyValue {
size_t data_length = [self lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
size_t buffer_length = data_length + 1;
char buf[buffer_length];
[self getCString:buf maxLength:buffer_length encoding:NSUTF8StringEncoding];
return rb_str_new(buf, data_length);
}
我在Ruby 1.8.7上
解決這個問題的最佳方法是什么 - 我很高興用Ruby或C(或Objective C)來做,但我寧願不使用任何具有本機C擴展的Ruby Gems
我不認為你把錯誤的東西傳給了Ruby。 您正在創建一個UTF-8編碼的Ruby 1.8字符串。 Ruby 1.8並不關心編碼,而是將字符串視為字節數組。 這意味着任何不正確的Ruby代碼都可以產生您所談論的結果。 '黑客'寶石真的是你唯一的選擇。
並升級到1.9甚至2.0你最好的出路。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.