mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Improved the String::createStringFromData method to fall back to a Windows 1252 codepage if given non-UTF8 data, and used this in parsing VST and WAV strings
This commit is contained in:
parent
c1799c9f82
commit
49a7ca4d82
4 changed files with 26 additions and 25 deletions
|
|
@ -646,24 +646,6 @@ namespace WavFileHelpers
|
|||
return true;
|
||||
}
|
||||
|
||||
static String getStringFromWindows1252Codepage (const uint8* data, size_t num)
|
||||
{
|
||||
HeapBlock<juce_wchar> unicode (num + 1);
|
||||
|
||||
for (size_t i = 0; i < num; ++i)
|
||||
unicode[i] = CharacterFunctions::getUnicodeCharFromWindows1252Codepage (data[i]);
|
||||
|
||||
unicode[num] = 0;
|
||||
return CharPointer_UTF32 (unicode);
|
||||
}
|
||||
|
||||
static String getStringFromData (const MemoryBlock& mb)
|
||||
{
|
||||
return CharPointer_UTF8::isValidString ((const char*) mb.getData(), (int) mb.getSize())
|
||||
? mb.toString()
|
||||
: getStringFromWindows1252Codepage ((const uint8*) mb.getData(), mb.getSize());
|
||||
}
|
||||
|
||||
static void addToMetadata (StringPairArray& values, InputStream& input, int64 chunkEnd)
|
||||
{
|
||||
while (input.getPosition() < chunkEnd)
|
||||
|
|
@ -682,7 +664,7 @@ namespace WavFileHelpers
|
|||
{
|
||||
MemoryBlock mb;
|
||||
input.readIntoMemoryBlock (mb, (ssize_t) infoLength);
|
||||
values.set (types[i], getStringFromData (mb));
|
||||
values.set (types[i], String::createStringFromData ((const char*) mb.getData(), mb.getSize()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1601,7 +1601,7 @@ private:
|
|||
jassert (index >= 0 && index < effect->numParams);
|
||||
char nm [256] = { 0 };
|
||||
dispatch (opcode, index, 0, nm, 0);
|
||||
return String (CharPointer_UTF8 (nm)).trim();
|
||||
return String::createStringFromData (nm, (int) sizeof (nm)).trim();
|
||||
}
|
||||
|
||||
String getCurrentProgramName()
|
||||
|
|
@ -1613,7 +1613,7 @@ private:
|
|||
{
|
||||
char nm[256] = { 0 };
|
||||
dispatch (effGetProgramName, 0, 0, nm, 0);
|
||||
progName = String (CharPointer_UTF8 (nm)).trim();
|
||||
progName = String::createStringFromData (nm, (int) sizeof (nm)).trim();
|
||||
}
|
||||
|
||||
const int index = getCurrentProgram();
|
||||
|
|
|
|||
|
|
@ -1973,7 +1973,18 @@ int String::getHexValue32() const noexcept { return CharacterFunctions::Hex
|
|||
int64 String::getHexValue64() const noexcept { return CharacterFunctions::HexParser<int64>::parse (text); }
|
||||
|
||||
//==============================================================================
|
||||
String String::createStringFromData (const void* const unknownData, const int size)
|
||||
static String getStringFromWindows1252Codepage (const char* data, size_t num)
|
||||
{
|
||||
HeapBlock<juce_wchar> unicode (num + 1);
|
||||
|
||||
for (size_t i = 0; i < num; ++i)
|
||||
unicode[i] = CharacterFunctions::getUnicodeCharFromWindows1252Codepage ((uint8) data[i]);
|
||||
|
||||
unicode[num] = 0;
|
||||
return CharPointer_UTF32 (unicode);
|
||||
}
|
||||
|
||||
String String::createStringFromData (const void* const unknownData, int size)
|
||||
{
|
||||
const uint8* const data = static_cast<const uint8*> (unknownData);
|
||||
|
||||
|
|
@ -2007,13 +2018,19 @@ String String::createStringFromData (const void* const unknownData, const int si
|
|||
return builder.result;
|
||||
}
|
||||
|
||||
const uint8* start = data;
|
||||
const char* start = (const char*) data;
|
||||
|
||||
if (size >= 3 && CharPointer_UTF8::isByteOrderMark (data))
|
||||
{
|
||||
start += 3;
|
||||
size -= 3;
|
||||
}
|
||||
|
||||
return String (CharPointer_UTF8 ((const char*) start),
|
||||
CharPointer_UTF8 ((const char*) (data + size)));
|
||||
if (CharPointer_UTF8::isValidString (start, size))
|
||||
return String (CharPointer_UTF8 (start),
|
||||
CharPointer_UTF8 (start + size));
|
||||
|
||||
return getStringFromWindows1252Codepage (start, (size_t) size);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
|
|||
|
|
@ -1199,6 +1199,8 @@ public:
|
|||
*/
|
||||
size_t copyToUTF32 (CharPointer_UTF32::CharType* destBuffer, size_t maxBufferSizeBytes) const noexcept;
|
||||
|
||||
static String fromSingleByteData (const void* data, size_t numBytes);
|
||||
|
||||
//==============================================================================
|
||||
/** Increases the string's internally allocated storage.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue