wide
зависит от реализации. Visual C ++ по умолчанию имеет значение 16 бит, если я правильно помню, в то время как настройки GCC по умолчанию зависят от цели. Здесь 32 бита. Обратите внимание: wchar_t (широкий тип символа) не имеет ничего общего с юникодом. Просто гарантируется, что он может хранить все элементы самого большого набора символов, поддерживаемые реализацией его локалями, и, по крайней мере, до тех пор, пока char. Вы можете сохранить строки unicode в std::string
с помощью кодировки utf-8
. Но это не будет понимать смысл кодов Unicode. Таким образом, str.size()
не даст вам количество логических символов в вашей строке, а просто количество элементов char или wchar_t, хранящихся в этой строке / wstring. По этой причине пользователи обложек gtk / glib C ++ разработали класс Glib::ustring
, который может обрабатывать utf-8. Если ваш wchar_t имеет длину 32 бита, вы можете использовать utf-32
в качестве кодировки в Юникоде, и вы можете хранить строки с кодом юникода и с использованием фиксированного (utf-32 фиксированной длины). Это означает, что функция s.size()
вашей wstring будет , затем вернет правильное количество логических символов wchar_t элементов и . У меня просто была похожая проблема. Проблема в том, что вы передаете функцию в качестве свойства storageRef вашему FileUploader. Вместо этого вы должны передать объект storageRef непосредственно следующим образом:
<FileUploader
accept="image/*"
name="avatar"
filename="operator_accreditation"
storageRef={firebase.onboardStorage().ref(`${uid}/files`)}
onUploadStart={this.handleUploadStart}
onUploadError={this.handleUploadError}
onUploadSuccess={this.handleUploadSuccess}
onProgress={this.handleProgress}
/>