mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-19 09:33:53 +00:00
fix: prefer UTF-8 encoding for shell output on Windows when detected
This commit is contained in:
@@ -391,6 +391,19 @@ describe('Shell Command Processor - Encoding Functions', () => {
|
|||||||
expect(result).toBe('windows-1252');
|
expect(result).toBe('windows-1252');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should prioritize UTF-8 detection over Windows system encoding', () => {
|
||||||
|
mockedOsPlatform.mockReturnValue('win32');
|
||||||
|
mockedExecSync.mockReturnValue('Active code page: 936'); // GBK
|
||||||
|
|
||||||
|
const buffer = Buffer.from('test');
|
||||||
|
// Mock chardet to return UTF-8
|
||||||
|
mockedChardetDetect.mockReturnValue('UTF-8');
|
||||||
|
|
||||||
|
const result = getCachedEncodingForBuffer(buffer);
|
||||||
|
|
||||||
|
expect(result).toBe('utf-8');
|
||||||
|
});
|
||||||
|
|
||||||
it('should cache null system encoding result', () => {
|
it('should cache null system encoding result', () => {
|
||||||
// Reset the cache specifically for this test
|
// Reset the cache specifically for this test
|
||||||
resetEncodingCache();
|
resetEncodingCache();
|
||||||
|
|||||||
@@ -34,6 +34,15 @@ export function getCachedEncodingForBuffer(buffer: Buffer): string {
|
|||||||
|
|
||||||
// If we have a cached system encoding, use it
|
// If we have a cached system encoding, use it
|
||||||
if (cachedSystemEncoding) {
|
if (cachedSystemEncoding) {
|
||||||
|
// If the system encoding is not UTF-8 (e.g. Windows CP936), but the buffer
|
||||||
|
// is detected as UTF-8, prefer UTF-8. This handles tools like 'git' which
|
||||||
|
// often output UTF-8 regardless of the system code page.
|
||||||
|
if (cachedSystemEncoding !== 'utf-8') {
|
||||||
|
const detected = detectEncodingFromBuffer(buffer);
|
||||||
|
if (detected === 'utf-8') {
|
||||||
|
return 'utf-8';
|
||||||
|
}
|
||||||
|
}
|
||||||
return cachedSystemEncoding;
|
return cachedSystemEncoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user