blob: 3f7631cffc6d114e0f1a87f351bc903fd8f72641 [file] [log] [blame]
groby@chromium.orgce28c932012-08-04 11:28:36 +09001// Copyright (c) 2012 The Chromium Authors. All rights reserved.
license.botf003cfe2008-08-24 09:55:55 +09002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
brettw@google.com7bea9d12008-08-07 12:11:42 +09004
5#ifndef BASE_SYS_STRING_CONVERSIONS_H_
6#define BASE_SYS_STRING_CONVERSIONS_H_
7
8// Provides system-dependent string type conversions for cases where it's
9// necessary to not use ICU. Generally, you should not need this in Chrome,
10// but it is used in some shared code. Dependencies should be minimal.
11
12#include <string>
rvargas@google.com73eb5d02011-03-25 04:00:20 +090013
darin@chromium.orge585bed2011-08-06 00:34:00 +090014#include "base/base_export.h"
brettw@google.com7bea9d12008-08-07 12:11:42 +090015#include "base/basictypes.h"
avi@chromium.org727451f2009-02-19 06:39:23 +090016#include "base/string16.h"
erikwright@chromium.orgacc16022011-12-13 09:13:00 +090017#include "base/string_piece.h"
brettw@google.com7bea9d12008-08-07 12:11:42 +090018
avi@google.com0edcae82008-08-23 04:55:26 +090019#if defined(OS_MACOSX)
20#include <CoreFoundation/CoreFoundation.h>
mark@chromium.orge27eae12008-10-09 06:02:56 +090021#ifdef __OBJC__
22@class NSString;
23#else
24class NSString;
avi@google.com0edcae82008-08-23 04:55:26 +090025#endif
mark@chromium.orge27eae12008-10-09 06:02:56 +090026#endif // OS_MACOSX
avi@google.com0edcae82008-08-23 04:55:26 +090027
brettw@google.com7bea9d12008-08-07 12:11:42 +090028namespace base {
29
30// Converts between wide and UTF-8 representations of a string. On error, the
31// result is system-dependent.
darin@chromium.orge585bed2011-08-06 00:34:00 +090032BASE_EXPORT std::string SysWideToUTF8(const std::wstring& wide);
33BASE_EXPORT std::wstring SysUTF8ToWide(const StringPiece& utf8);
brettw@google.com7bea9d12008-08-07 12:11:42 +090034
35// Converts between wide and the system multi-byte representations of a string.
36// DANGER: This will lose information and can change (on Windows, this can
brettw@google.come3c034a2008-08-08 03:31:40 +090037// change between reboots).
darin@chromium.orge585bed2011-08-06 00:34:00 +090038BASE_EXPORT std::string SysWideToNativeMB(const std::wstring& wide);
39BASE_EXPORT std::wstring SysNativeMBToWide(const StringPiece& native_mb);
brettw@google.com7bea9d12008-08-07 12:11:42 +090040
41// Windows-specific ------------------------------------------------------------
42
brettw@google.come3c034a2008-08-08 03:31:40 +090043#if defined(OS_WIN)
brettw@google.com7bea9d12008-08-07 12:11:42 +090044
mmentovai@google.comaf218692008-08-08 04:31:16 +090045// Converts between 8-bit and wide strings, using the given code page. The
46// code page identifier is one accepted by the Windows function
brettw@google.com7bea9d12008-08-07 12:11:42 +090047// MultiByteToWideChar().
darin@chromium.orge585bed2011-08-06 00:34:00 +090048BASE_EXPORT std::wstring SysMultiByteToWide(const StringPiece& mb,
49 uint32 code_page);
50BASE_EXPORT std::string SysWideToMultiByte(const std::wstring& wide,
51 uint32 code_page);
brettw@google.com7bea9d12008-08-07 12:11:42 +090052
brettw@google.come3c034a2008-08-08 03:31:40 +090053#endif // defined(OS_WIN)
brettw@google.com7bea9d12008-08-07 12:11:42 +090054
avi@google.com0edcae82008-08-23 04:55:26 +090055// Mac-specific ----------------------------------------------------------------
maruel@chromium.org8fe7adc2009-03-04 00:01:12 +090056
avi@google.com0edcae82008-08-23 04:55:26 +090057#if defined(OS_MACOSX)
maruel@chromium.org8fe7adc2009-03-04 00:01:12 +090058
mark@chromium.orge27eae12008-10-09 06:02:56 +090059// Converts between STL strings and CFStringRefs/NSStrings.
avi@google.com0edcae82008-08-23 04:55:26 +090060
61// Creates a string, and returns it with a refcount of 1. You are responsible
62// for releasing it. Returns NULL on failure.
darin@chromium.orge585bed2011-08-06 00:34:00 +090063BASE_EXPORT CFStringRef SysUTF8ToCFStringRef(const std::string& utf8);
64BASE_EXPORT CFStringRef SysUTF16ToCFStringRef(const string16& utf16);
avi@google.com0edcae82008-08-23 04:55:26 +090065
mark@chromium.orge27eae12008-10-09 06:02:56 +090066// Same, but returns an autoreleased NSString.
darin@chromium.orge585bed2011-08-06 00:34:00 +090067BASE_EXPORT NSString* SysUTF8ToNSString(const std::string& utf8);
68BASE_EXPORT NSString* SysUTF16ToNSString(const string16& utf16);
mark@chromium.orge27eae12008-10-09 06:02:56 +090069
avi@google.com0edcae82008-08-23 04:55:26 +090070// Converts a CFStringRef to an STL string. Returns an empty string on failure.
darin@chromium.orge585bed2011-08-06 00:34:00 +090071BASE_EXPORT std::string SysCFStringRefToUTF8(CFStringRef ref);
72BASE_EXPORT string16 SysCFStringRefToUTF16(CFStringRef ref);
avi@google.com0edcae82008-08-23 04:55:26 +090073
mirandac@chromium.org69689342009-11-09 04:04:54 +090074// Same, but accepts NSString input. Converts nil NSString* to the appropriate
75// string type of length 0.
darin@chromium.orge585bed2011-08-06 00:34:00 +090076BASE_EXPORT std::string SysNSStringToUTF8(NSString* ref);
77BASE_EXPORT string16 SysNSStringToUTF16(NSString* ref);
mark@chromium.orge27eae12008-10-09 06:02:56 +090078
avi@google.com0edcae82008-08-23 04:55:26 +090079#endif // defined(OS_MACOSX)
maruel@chromium.org8fe7adc2009-03-04 00:01:12 +090080
brettw@google.com7bea9d12008-08-07 12:11:42 +090081} // namespace base
82
83#endif // BASE_SYS_STRING_CONVERSIONS_H_