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);