簡體   English   中英

Ruby 1.8.7中的Ruby字符串編碼

[英]Ruby string encoding in Ruby 1.8.7

我正在使用Ruby C API(來自Objective C)創建一個Ruby字符串,它恰好包含芬蘭語字符。

一旦進入Ruby,我就會調用一個gem進行一些操作,它會截斷字符串,但編碼的字符會被截斷不正確 - 非常像這個問題:

如何獲取Unicode字符串的Ruby子字符串?

一個示例字符串是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM