Mercurial > hg > orthanc
comparison Core/Toolbox.cpp @ 1557:ad1e127b4ed5
fix in encodings
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 20 Aug 2015 17:29:42 +0200 |
parents | d6a93e12b1c1 |
children | 124de28b32ed |
comparison
equal
deleted
inserted
replaced
1556:b8dc2f855a83 | 1557:ad1e127b4ed5 |
---|---|
564 boost::filesystem::path p(GetPathToExecutableInternal()); | 564 boost::filesystem::path p(GetPathToExecutableInternal()); |
565 return boost::filesystem::absolute(p.parent_path()).string(); | 565 return boost::filesystem::absolute(p.parent_path()).string(); |
566 } | 566 } |
567 | 567 |
568 | 568 |
569 std::string Toolbox::ConvertToUtf8(const std::string& source, | 569 static const char* GetBoostLocaleEncoding(const Encoding sourceEncoding) |
570 const Encoding sourceEncoding) | 570 { |
571 { | |
572 const char* encoding; | |
573 | |
574 | |
575 // http://bradleyross.users.sourceforge.net/docs/dicom/doc/src-html/org/dcm4che2/data/SpecificCharacterSet.html | |
576 switch (sourceEncoding) | 571 switch (sourceEncoding) |
577 { | 572 { |
578 case Encoding_Utf8: | 573 case Encoding_Utf8: |
579 // Already in UTF-8: No conversion is required | 574 return "UTF-8"; |
580 return source; | |
581 | 575 |
582 case Encoding_Ascii: | 576 case Encoding_Ascii: |
583 return ConvertToAscii(source); | 577 return "ASCII"; |
584 | 578 |
585 case Encoding_Latin1: | 579 case Encoding_Latin1: |
586 encoding = "ISO-8859-1"; | 580 return "ISO-8859-1"; |
587 break; | 581 break; |
588 | 582 |
589 case Encoding_Latin2: | 583 case Encoding_Latin2: |
590 encoding = "ISO-8859-2"; | 584 return "ISO-8859-2"; |
591 break; | 585 break; |
592 | 586 |
593 case Encoding_Latin3: | 587 case Encoding_Latin3: |
594 encoding = "ISO-8859-3"; | 588 return "ISO-8859-3"; |
595 break; | 589 break; |
596 | 590 |
597 case Encoding_Latin4: | 591 case Encoding_Latin4: |
598 encoding = "ISO-8859-4"; | 592 return "ISO-8859-4"; |
599 break; | 593 break; |
600 | 594 |
601 case Encoding_Latin5: | 595 case Encoding_Latin5: |
602 encoding = "ISO-8859-9"; | 596 return "ISO-8859-9"; |
603 break; | 597 break; |
604 | 598 |
605 case Encoding_Cyrillic: | 599 case Encoding_Cyrillic: |
606 encoding = "ISO-8859-5"; | 600 return "ISO-8859-5"; |
607 break; | 601 break; |
608 | 602 |
609 case Encoding_Windows1251: | 603 case Encoding_Windows1251: |
610 encoding = "WINDOWS-1251"; | 604 return "WINDOWS-1251"; |
611 break; | 605 break; |
612 | 606 |
613 case Encoding_Arabic: | 607 case Encoding_Arabic: |
614 encoding = "ISO-8859-6"; | 608 return "ISO-8859-6"; |
615 break; | 609 break; |
616 | 610 |
617 case Encoding_Greek: | 611 case Encoding_Greek: |
618 encoding = "ISO-8859-7"; | 612 return "ISO-8859-7"; |
619 break; | 613 break; |
620 | 614 |
621 case Encoding_Hebrew: | 615 case Encoding_Hebrew: |
622 encoding = "ISO-8859-8"; | 616 return "ISO-8859-8"; |
623 break; | 617 break; |
624 | 618 |
625 case Encoding_Japanese: | 619 case Encoding_Japanese: |
626 encoding = "SHIFT-JIS"; | 620 return "SHIFT-JIS"; |
627 break; | 621 break; |
628 | 622 |
629 case Encoding_Chinese: | 623 case Encoding_Chinese: |
630 encoding = "GB18030"; | 624 return "GB18030"; |
631 break; | 625 break; |
632 | 626 |
633 case Encoding_Thai: | 627 case Encoding_Thai: |
634 encoding = "TIS620.2533-0"; | 628 return "TIS620.2533-0"; |
635 break; | 629 break; |
636 | 630 |
637 default: | 631 default: |
638 throw OrthancException(ErrorCode_NotImplemented); | 632 throw OrthancException(ErrorCode_NotImplemented); |
639 } | 633 } |
634 } | |
635 | |
636 | |
637 std::string Toolbox::ConvertToUtf8(const std::string& source, | |
638 Encoding sourceEncoding) | |
639 { | |
640 if (sourceEncoding == Encoding_Utf8) | |
641 { | |
642 // Already in UTF-8: No conversion is required | |
643 return source; | |
644 } | |
645 | |
646 if (sourceEncoding == Encoding_Ascii) | |
647 { | |
648 return ConvertToAscii(source); | |
649 } | |
650 | |
651 const char* encoding = GetBoostLocaleEncoding(sourceEncoding); | |
640 | 652 |
641 try | 653 try |
642 { | 654 { |
643 return boost::locale::conv::to_utf<char>(source, encoding); | 655 return boost::locale::conv::to_utf<char>(source, encoding); |
656 } | |
657 catch (std::runtime_error&) | |
658 { | |
659 // Bad input string or bad encoding | |
660 return ConvertToAscii(source); | |
661 } | |
662 } | |
663 | |
664 | |
665 std::string Toolbox::ConvertFromUtf8(const std::string& source, | |
666 Encoding targetEncoding) | |
667 { | |
668 if (targetEncoding == Encoding_Utf8) | |
669 { | |
670 // Already in UTF-8: No conversion is required | |
671 return source; | |
672 } | |
673 | |
674 if (targetEncoding == Encoding_Ascii) | |
675 { | |
676 return ConvertToAscii(source); | |
677 } | |
678 | |
679 const char* encoding = GetBoostLocaleEncoding(targetEncoding); | |
680 | |
681 try | |
682 { | |
683 return boost::locale::conv::from_utf<char>(source, encoding); | |
644 } | 684 } |
645 catch (std::runtime_error&) | 685 catch (std::runtime_error&) |
646 { | 686 { |
647 // Bad input string or bad encoding | 687 // Bad input string or bad encoding |
648 return ConvertToAscii(source); | 688 return ConvertToAscii(source); |