if i make use of the (pseudo) Iconv :
macroman = Iconv.new('macintosh', 'utf-8', str)
i found MacRoman is internally 'macintosh' because :
puts "CFStringConvertEncodingToIANACharSetName(KCFStringEncodingMacRoman) = #{CFStringConvertEncodingToIANACharSetName(KCFStringEncodingMacRoman)}"
gave me :
# => CFStringConvertEncodingToIANACharSetName(KCFStringEncodingMacRoman) = macintosh
i get back a string (saved to file) still in UTF-8 encoded.
then i've read the source of "/Library/Frameworks/MacRuby.framework/Versions/0.6/usr/lib/ruby/1.9.0/iconv.rb"
and put some part in a moke-up like that :
framework 'Foundation'
str = "une phrase accentuée, ça vous va ?"
puts str
puts "str.size = #{str.size}, str.encoding = #{str.encoding}"
def to_macroman(str)
data = CFStringCreateExternalRepresentation(nil, str, KCFStringEncodingMacRoman, 0)
if data.nil?
raise "can't retrieve data from `#{str}'"
end
dest = CFStringCreateFromExternalRepresentation(nil, data, KCFStringEncodingMacRoman)
if dest.nil?
raise "can't convert data from `#{str}'"
end
CFRelease(data)
CFRelease(dest)
dest.mutableCopy
return dest
end
macroman = to_macroman(str)
puts "macroman.size = #{macroman.size}, macroman.encoding = #{macroman.encoding}"
File.open("#{SIGNATURES_FOLDER}macroman.txt", File::WRONLY|File::TRUNC|File::CREAT, 0666) {|f| f.print macroman}
giving the output :
une phrase accentuée, ça vous va ?
str.size = 34, str.encoding = UTF-8
macroman.size = 34, macroman.encoding = UTF-8
then i ask why this doesn't convert to MacRoman, as the internal iconv.rb ????
best,
Yvon