Tôi đang sử dụng boost::lexical_cast<std::string>(double)
để chuyển đổi chuỗi thành chuỗi kép, tạo luồng byte tuần tự JSON, nghĩa là (ở phía trên) được phân tích bằng .NET.Đảm bảo bất biến cục bộ của tăng :: lexical_cast <>
Tôi có thể buộc .NET sử dụng InvariantCulture
để phân tích cú pháp, do đó trả về kết quả có thể dự đoán được trên mọi ngôn ngữ có thể.
Tuy nhiên, tôi không thể tìm thấy bảo đảm này trong tài liệu boost::lexical_cast. Tôi đã thử nó một chút, và nó hoạt động theo cùng một cách cho các miền địa phương khác nhau được thiết lập. Nhưng, tôi không thể chắc chắn chỉ từ vài bài kiểm tra, tôi thiếu một cái gì đó trong tài liệu, hoặc điều này không thể được bảo đảm ở tất cả, và tôi phải sử dụng cái gì khác?
EDIT: Tôi đã tìm thấy sự cố.
std::locale::global(std::locale("Czech"));
std::cout << boost::lexical_cast<std::string>(0.15784465) << std::endl;
trả về 0,15784465
và điều đó là không mong muốn. Tôi có thể buộc boost::lexical_cast<>
không nhận thức được ngôn ngữ không?
Về cơ bản, vấn đề là miền địa phương C++ không phải là thuộc tính có tính chất tôn trọng RAII. – MSalters