【问题标题】:Change string locale更改字符串语言环境
【发布时间】:2009-12-31 17:07:20
【问题描述】:

我对特定于语言环境的转换不是很熟悉,因此我可能在这里使用了错误的术语。这就是我想要发生的事情。

我想写一个函数

std::string changeLocale( const std::string& str, const std::locale& loc )

如果我这样调用这个函数:

changeLocale( std::string( "1.01" ), std::locale( "french_france" ) )

输出字符串将为“1,01”

感谢您的帮助!

【问题讨论】:

  • 没有“字符串语言环境”这样的东西。语言环境是一组格式规则和反映用户语言和文化的其他参数。字符串是一个字符序列。从其他数据创建字符串时,可能会使用语言环境。一旦创建,就没有与之关联的语言环境。

标签: c++ string stl


【解决方案1】:

这样的事情应该可以解决问题

#include <iostream>
#include <sstream>
#include <locale>
int main (int argc,char** argv) {
    std::stringstream ss;
    ss.imbue(std::locale("fr_FR.UTF8"));
    double value = 1.01; 
    ss << value; 
    std::cout << ss.str() << std::endl; 
    return 0;
}             

应该给你1,01 的输出(至少它在 g++ 上是这样)。您可能不得不摆弄语言环境规范,因为它非常特定于平台。

【讨论】:

  • 感谢 Jeff,这对 VS2008 上的数值起到了作用。我确实不得不像你说的那样摆弄语言环境规范;我唯一能开始工作的是 std::locale( "french_france" ) 无论如何,这个解决方案只适用于数字数据。如果我的输入字符串是“我重 200.5 磅”并且我希望输出是“我重 200.5 磅”怎么办?这可能吗?
  • 嗯,200.5 是不是一个数字?还是我误解了你的问题?
  • 我的意思是问我如何处理字符串输入。例如以下不起作用: stringstream ss; ss.imbue(locale("french_france")); string s("我重 200.5 磅"); ss
  • 我想帮助解决这个问题,却发现 std::locale 在 Mac OS X 上被严重破坏:它只接受语言环境名称“C”和“POSIX”。至少 10.4 到 10.6 似乎是这样。您仍然可以获取当前语言环境并覆盖各种特征;但是,您不能加载像“fr_FR”这样的预定义语言环境。
  • @praetorian:如果数字在一个字符串中混杂在一起,那么我认为唯一的选择是将字符串拆开并获取数字,对其进行格式化,然后将其重新组合在一起。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多