blob: 18be8264cbc3855c861c40670c96cbc3df299090 [file] [log] [blame]
license.botf003cfe2008-08-24 09:55:55 +09001// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2// 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>
13#include "base/basictypes.h"
avi@chromium.org727451f2009-02-19 06:39:23 +090014#include "base/string16.h"
brettw@google.com7bea9d12008-08-07 12:11:42 +090015
avi@google.com0edcae82008-08-23 04:55:26 +090016#if defined(OS_MACOSX)
17#include <CoreFoundation/CoreFoundation.h>
mark@chromium.orge27eae12008-10-09 06:02:56 +090018#ifdef __OBJC__
19@class NSString;
20#else
21class NSString;
avi@google.com0edcae82008-08-23 04:55:26 +090022#endif
mark@chromium.orge27eae12008-10-09 06:02:56 +090023#endif // OS_MACOSX
avi@google.com0edcae82008-08-23 04:55:26 +090024
brettw@google.com7bea9d12008-08-07 12:11:42 +090025namespace base {
26
tony@chromium.orgb84e9bd2009-09-11 06:08:39 +090027class StringPiece;
28
brettw@google.com7bea9d12008-08-07 12:11:42 +090029// Converts between wide and UTF-8 representations of a string. On error, the
30// result is system-dependent.
31std::string SysWideToUTF8(const std::wstring& wide);
deanm@google.com74c2de42008-08-20 20:17:00 +090032std::wstring SysUTF8ToWide(const StringPiece& utf8);
brettw@google.com7bea9d12008-08-07 12:11:42 +090033
34// Converts between wide and the system multi-byte representations of a string.
35// DANGER: This will lose information and can change (on Windows, this can
brettw@google.come3c034a2008-08-08 03:31:40 +090036// change between reboots).
brettw@google.com7bea9d12008-08-07 12:11:42 +090037std::string SysWideToNativeMB(const std::wstring& wide);
deanm@google.com74c2de42008-08-20 20:17:00 +090038std::wstring SysNativeMBToWide(const StringPiece& native_mb);
brettw@google.com7bea9d12008-08-07 12:11:42 +090039
40// Windows-specific ------------------------------------------------------------
41
brettw@google.come3c034a2008-08-08 03:31:40 +090042#if defined(OS_WIN)
brettw@google.com7bea9d12008-08-07 12:11:42 +090043
mmentovai@google.comaf218692008-08-08 04:31:16 +090044// Converts between 8-bit and wide strings, using the given code page. The
45// code page identifier is one accepted by the Windows function
brettw@google.com7bea9d12008-08-07 12:11:42 +090046// MultiByteToWideChar().
deanm@google.com74c2de42008-08-20 20:17:00 +090047std::wstring SysMultiByteToWide(const StringPiece& mb, uint32 code_page);
brettw@google.com7bea9d12008-08-07 12:11:42 +090048std::string SysWideToMultiByte(const std::wstring& wide, uint32 code_page);
49
brettw@google.come3c034a2008-08-08 03:31:40 +090050#endif // defined(OS_WIN)
brettw@google.com7bea9d12008-08-07 12:11:42 +090051
avi@google.com0edcae82008-08-23 04:55:26 +090052// Mac-specific ----------------------------------------------------------------
maruel@chromium.org8fe7adc2009-03-04 00:01:12 +090053
avi@google.com0edcae82008-08-23 04:55:26 +090054#if defined(OS_MACOSX)
maruel@chromium.org8fe7adc2009-03-04 00:01:12 +090055
mark@chromium.orge27eae12008-10-09 06:02:56 +090056// Converts between STL strings and CFStringRefs/NSStrings.
avi@google.com0edcae82008-08-23 04:55:26 +090057
58// Creates a string, and returns it with a refcount of 1. You are responsible
59// for releasing it. Returns NULL on failure.
60CFStringRef SysUTF8ToCFStringRef(const std::string& utf8);
avi@chromium.org727451f2009-02-19 06:39:23 +090061CFStringRef SysUTF16ToCFStringRef(const string16& utf16);
avi@google.com0edcae82008-08-23 04:55:26 +090062CFStringRef SysWideToCFStringRef(const std::wstring& wide);
63
mark@chromium.orge27eae12008-10-09 06:02:56 +090064// Same, but returns an autoreleased NSString.
65NSString* SysUTF8ToNSString(const std::string& utf8);
avi@chromium.org727451f2009-02-19 06:39:23 +090066NSString* SysUTF16ToNSString(const string16& utf16);
mark@chromium.orge27eae12008-10-09 06:02:56 +090067NSString* SysWideToNSString(const std::wstring& wide);
68
avi@google.com0edcae82008-08-23 04:55:26 +090069// Converts a CFStringRef to an STL string. Returns an empty string on failure.
70std::string SysCFStringRefToUTF8(CFStringRef ref);
avi@chromium.org727451f2009-02-19 06:39:23 +090071string16 SysCFStringRefToUTF16(CFStringRef ref);
avi@google.com0edcae82008-08-23 04:55:26 +090072std::wstring SysCFStringRefToWide(CFStringRef ref);
73
mark@chromium.orge27eae12008-10-09 06:02:56 +090074// Same, but accepts NSString input.
75std::string SysNSStringToUTF8(NSString* ref);
avi@chromium.org727451f2009-02-19 06:39:23 +090076string16 SysNSStringToUTF16(NSString* ref);
mark@chromium.orge27eae12008-10-09 06:02:56 +090077std::wstring SysNSStringToWide(NSString* ref);
78
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_